--[[
#define (.*\s+)(.*) \1 = \2
#if.*
#endif.*
(\d)L \1


install windows platform SDK and find Windows.h
run vcvars32.bat
cl /EP Windows.h > Windows.i
sed "/^$/d" Windows.i (remove empty lines)
remove all [.*?SA_.*?] annotations
replace all __forceinline with __inline
remove all __w64 annotations
remove all __declspec(restrict) annotations
the result is below.
]]

local ffi=require'ffi'
ffi.cdef[[
typedef unsigned int   size_t;
typedef unsigned short wchar_t;
enum SA_YesNoMaybe
{
	SA_No = 0x0fff0001,
	SA_Maybe = 0x0fff0010,
	SA_Yes = 0x0fff0100
};
typedef enum SA_YesNoMaybe SA_YesNoMaybe;
enum SA_AccessType
{
	SA_NoAccess = 0,
	SA_Read = 1,
	SA_Write = 2,
	SA_ReadWrite = 3
};
typedef enum SA_AccessType SA_AccessType;

struct PreAttribute
{
	unsigned int Deref;
	SA_YesNoMaybe Valid;
	SA_YesNoMaybe Null;
	SA_YesNoMaybe Tainted;
	SA_AccessType Access;
	size_t ValidElementsConst;
	size_t ValidBytesConst;
	const wchar_t* ValidElements;
	const wchar_t* ValidBytes;
	const wchar_t* ValidElementsLength;
	const wchar_t* ValidBytesLength;
	size_t WritableElementsConst;
	size_t WritableBytesConst;
	const wchar_t* WritableElements;
	const wchar_t* WritableBytes;
	const wchar_t* WritableElementsLength;
	const wchar_t* WritableBytesLength;
	size_t ElementSizeConst;
	const wchar_t* ElementSize;
	SA_YesNoMaybe NullTerminated;
	const wchar_t* Condition;
};

struct PostAttribute
{
	unsigned int Deref;
	SA_YesNoMaybe Valid;
	SA_YesNoMaybe Null;
	SA_YesNoMaybe Tainted;
	SA_AccessType Access;
	size_t ValidElementsConst;
	size_t ValidBytesConst;
	const wchar_t* ValidElements;
	const wchar_t* ValidBytes;
	const wchar_t* ValidElementsLength;
	const wchar_t* ValidBytesLength;
	size_t WritableElementsConst;
	size_t WritableBytesConst;
	const wchar_t* WritableElements;
	const wchar_t* WritableBytes;
	const wchar_t* WritableElementsLength;
	const wchar_t* WritableBytesLength;
	size_t ElementSizeConst;
	const wchar_t* ElementSize;
	SA_YesNoMaybe NullTerminated;
	SA_YesNoMaybe MustCheck;
	const wchar_t* Condition;
};

struct FormatStringAttribute
{
	const wchar_t* Style;
	const wchar_t* UnformattedAlternative;
};

struct InvalidCheckAttribute
{
	long Value;
};

struct SuccessAttribute
{
	const wchar_t* Condition;
};

struct PreBoundAttribute
{
	unsigned int Deref;
};

struct PostBoundAttribute
{
	unsigned int Deref;
};

struct PreRangeAttribute
{
	unsigned int Deref;
	const char* MinVal;
	const char* MaxVal;
};

struct PostRangeAttribute
{
	unsigned int Deref;
	const char* MinVal;
	const char* MaxVal;
};
typedef struct PreAttribute SA_Pre;
typedef struct PreAttribute PreAttribute;
typedef struct PostAttribute SA_Post;
typedef struct PostAttribute PostAttribute;
typedef struct FormatStringAttribute SA_FormatString;
typedef struct InvalidCheckAttribute SA_InvalidCheck;
typedef struct SuccessAttribute      SA_Success;
typedef struct PreBoundAttribute     SA_PreBound;
typedef struct PostBoundAttribute    SA_PostBound;
typedef struct PreRangeAttribute     SA_PreRange;
typedef struct PostRangeAttribute    SA_PostRange;
typedef unsigned int   uintptr_t;
typedef char *  va_list;
typedef size_t rsize_t;
typedef int            intptr_t;
typedef int            ptrdiff_t;
typedef unsigned short wint_t;
typedef unsigned short wctype_t;
__declspec(deprecated("This name was supported during some Whidbey pre-releases. Instead, use the standard name errno_t.")) typedef int errcode;
typedef int errno_t;
typedef long __time32_t;
typedef __int64 __time64_t;
typedef __time64_t time_t;
struct threadlocaleinfostruct;
struct threadmbcinfostruct;
typedef struct threadlocaleinfostruct * pthreadlocinfo;
typedef struct threadmbcinfostruct * pthreadmbcinfo;
struct __lc_time_data;
typedef struct localeinfo_struct
{
    pthreadlocinfo locinfo;
    pthreadmbcinfo mbcinfo;
} _locale_tstruct, *_locale_t;
typedef struct tagLC_ID {
        unsigned short wLanguage;
        unsigned short wCountry;
        unsigned short wCodePage;
} LC_ID, *LPLC_ID;
typedef struct threadlocaleinfostruct {
        int refcount;
        unsigned int lc_codepage;
        unsigned int lc_collate_cp;
        unsigned long lc_handle[6];
        LC_ID lc_id[6];
        struct {
            char *locale;
            wchar_t *wlocale;
            int *refcount;
            int *wrefcount;
        } lc_category[6];
        int lc_clike;
        int mb_cur_max;
        int * lconv_intl_refcount;
        int * lconv_num_refcount;
        int * lconv_mon_refcount;
        struct lconv * lconv;
        int * ctype1_refcount;
        unsigned short * ctype1;
        const unsigned short * pctype;
        const unsigned char * pclmap;
        const unsigned char * pcumap;
        struct __lc_time_data * lc_time_curr;
} threadlocinfo;
typedef enum _EXCEPTION_DISPOSITION {
    ExceptionContinueExecution,
    ExceptionContinueSearch,
    ExceptionNestedException,
    ExceptionCollidedUnwind
} EXCEPTION_DISPOSITION;
struct _EXCEPTION_RECORD;
struct _CONTEXT;
EXCEPTION_DISPOSITION __cdecl _except_handler (
    struct _EXCEPTION_RECORD *_ExceptionRecord,
    void * _EstablisherFrame,
    struct _CONTEXT *_ContextRecord,
    void * _DispatcherContext
    );
unsigned long __cdecl _exception_code(void);
void *        __cdecl _exception_info(void);
int           __cdecl _abnormal_termination(void);
typedef unsigned long ULONG;
typedef ULONG *PULONG;
typedef unsigned short USHORT;
typedef USHORT *PUSHORT;
typedef unsigned char UCHAR;
typedef UCHAR *PUCHAR;
typedef char *PSZ;
typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef float               FLOAT;
typedef FLOAT               *PFLOAT;
typedef BOOL            *PBOOL;
typedef BOOL             *LPBOOL;
typedef BYTE            *PBYTE;
typedef BYTE             *LPBYTE;
typedef int             *PINT;
typedef int              *LPINT;
typedef WORD            *PWORD;
typedef WORD             *LPWORD;
typedef long             *LPLONG;
typedef DWORD           *PDWORD;
typedef DWORD            *LPDWORD;
typedef void             *LPVOID;
typedef const void       *LPCVOID;
typedef int                 INT;
typedef unsigned int        UINT;
typedef unsigned int        *PUINT;
 const unsigned short * __cdecl __pctype_func(void);
 extern const unsigned short *_pctype;
 extern const unsigned short _wctype[];
 const wctype_t * __cdecl __pwctype_func(void);
 extern const wctype_t *_pwctype;
 int __cdecl _isctype(int _C, int _Type);
 int __cdecl _isctype_l(int _C, int _Type, _locale_t _Locale);
  int __cdecl isalpha(int _C);
 int __cdecl _isalpha_l(int _C, _locale_t _Locale);
  int __cdecl isupper(int _C);
 int __cdecl _isupper_l(int _C, _locale_t _Locale);
  int __cdecl islower(int _C);
 int __cdecl _islower_l(int _C, _locale_t _Locale);
  int __cdecl isdigit(int _C);
 int __cdecl _isdigit_l(int _C, _locale_t _Locale);
 int __cdecl isxdigit(int _C);
 int __cdecl _isxdigit_l(int _C, _locale_t _Locale);
  int __cdecl isspace(int _C);
 int __cdecl _isspace_l(int _C, _locale_t _Locale);
 int __cdecl ispunct(int _C);
 int __cdecl _ispunct_l(int _C, _locale_t _Locale);
  int __cdecl isalnum(int _C);
 int __cdecl _isalnum_l(int _C, _locale_t _Locale);
 int __cdecl isprint(int _C);
 int __cdecl _isprint_l(int _C, _locale_t _Locale);
 int __cdecl isgraph(int _C);
 int __cdecl _isgraph_l(int _C, _locale_t _Locale);
 int __cdecl iscntrl(int _C);
 int __cdecl _iscntrl_l(int _C, _locale_t _Locale);
  int __cdecl toupper(int _C);
  int __cdecl tolower(int _C);
  int __cdecl _tolower(int _C);
 int __cdecl _tolower_l(int _C, _locale_t _Locale);
  int __cdecl _toupper(int _C);
 int __cdecl _toupper_l(int _C, _locale_t _Locale);
 int __cdecl __isascii(int _C);
 int __cdecl __toascii(int _C);
 int __cdecl __iscsymf(int _C);
 int __cdecl __iscsym(int _C);
 int __cdecl iswalpha(wint_t _C);
 int __cdecl _iswalpha_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswupper(wint_t _C);
 int __cdecl _iswupper_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswlower(wint_t _C);
 int __cdecl _iswlower_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswdigit(wint_t _C);
 int __cdecl _iswdigit_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswxdigit(wint_t _C);
 int __cdecl _iswxdigit_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswspace(wint_t _C);
 int __cdecl _iswspace_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswpunct(wint_t _C);
 int __cdecl _iswpunct_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswalnum(wint_t _C);
 int __cdecl _iswalnum_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswprint(wint_t _C);
 int __cdecl _iswprint_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswgraph(wint_t _C);
 int __cdecl _iswgraph_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswcntrl(wint_t _C);
 int __cdecl _iswcntrl_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswascii(wint_t _C);
 int __cdecl isleadbyte(int _C);
 int __cdecl _isleadbyte_l(int _C, _locale_t _Locale);
 wint_t __cdecl towupper(wint_t _C);
 wint_t __cdecl _towupper_l(wint_t _C, _locale_t _Locale);
 wint_t __cdecl towlower(wint_t _C);
 wint_t __cdecl _towlower_l(wint_t _C, _locale_t _Locale);
 int __cdecl iswctype(wint_t _C, wctype_t _Type);
 int __cdecl _iswctype_l(wint_t _C, wctype_t _Type, _locale_t _Locale);
 int __cdecl __iswcsymf(wint_t _C);
 int __cdecl _iswcsymf_l(wint_t _C, _locale_t _Locale);
 int __cdecl __iswcsym(wint_t _C);
 int __cdecl _iswcsym_l(wint_t _C, _locale_t _Locale);
__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using " "iswctype" " instead. See online help for details."))  int __cdecl is_wctype(wint_t _C, wctype_t _Type);
 extern int __mb_cur_max;
 int __cdecl ___mb_cur_max_func(void);
 int __cdecl ___mb_cur_max_l_func(_locale_t);
typedef     char* ValidCompNameA;
typedef     unsigned short* ValidCompNameW;
typedef     const unsigned short* ConstValidCompNameW;
typedef      char* SAL_ValidCompNameT;
typedef     const  char* SAL_ConstValidCompNameT;
  typedef unsigned long POINTER_64_INT;
typedef signed char         INT8, *PINT8;
typedef signed short        INT16, *PINT16;
typedef signed int          INT32, *PINT32;
typedef signed __int64      INT64, *PINT64;
typedef unsigned char       UINT8, *PUINT8;
typedef unsigned short      UINT16, *PUINT16;
typedef unsigned int        UINT32, *PUINT32;
typedef unsigned __int64    UINT64, *PUINT64;
typedef signed int LONG32, *PLONG32;
typedef unsigned int ULONG32, *PULONG32;
typedef unsigned int DWORD32, *PDWORD32;
    typedef int INT_PTR, *PINT_PTR;
    typedef unsigned int UINT_PTR, *PUINT_PTR;
    typedef long LONG_PTR, *PLONG_PTR;
    typedef unsigned long ULONG_PTR, *PULONG_PTR;
typedef unsigned short UHALF_PTR, *PUHALF_PTR;
typedef short HALF_PTR, *PHALF_PTR;
typedef long SHANDLE_PTR;
typedef unsigned long HANDLE_PTR;
__inline
void * __ptr64
PtrToPtr64(
    const void *p
    )
{
    return((void * __ptr64) (unsigned __int64) (ULONG_PTR)p );
}
__inline
void *
Ptr64ToPtr(
    const void * __ptr64 p
    )
{
    return((void *) (ULONG_PTR) (unsigned __int64) p);
}
__inline
void * __ptr64
HandleToHandle64(
    const void *h
    )
{
    return((void * __ptr64)(__int64)(LONG_PTR)h );
}
__inline
void *
Handle64ToHandle(
    const void * __ptr64 h
    )
{
    return((void *) (ULONG_PTR) (unsigned __int64) h );
}
typedef ULONG_PTR SIZE_T, *PSIZE_T;
typedef LONG_PTR SSIZE_T, *PSSIZE_T;
typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
typedef __int64 LONG64, *PLONG64;
typedef unsigned __int64 ULONG64, *PULONG64;
typedef unsigned __int64 DWORD64, *PDWORD64;
typedef ULONG_PTR KAFFINITY;
typedef KAFFINITY *PKAFFINITY;
typedef void *PVOID;
typedef void * __ptr64 PVOID64;
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
typedef int INT;
typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR, *LPWCH, *PWCH;
typedef const WCHAR *LPCWCH, *PCWCH;
typedef  WCHAR *NWPSTR, *LPWSTR, *PWSTR;
typedef  PWSTR *PZPWSTR;
typedef  const PWSTR *PCZPWSTR;
typedef  WCHAR  *LPUWSTR, *PUWSTR;
typedef  const WCHAR *LPCWSTR, *PCWSTR;
typedef  PCWSTR *PZPCWSTR;
typedef  const WCHAR  *LPCUWSTR, *PCUWSTR;
typedef CHAR *PCHAR, *LPCH, *PCH;
typedef const CHAR *LPCCH, *PCCH;
typedef  CHAR *NPSTR, *LPSTR, *PSTR;
typedef  PSTR *PZPSTR;
typedef  const PSTR *PCZPSTR;
typedef  const CHAR *LPCSTR, *PCSTR;
typedef  PCSTR *PZPCSTR;
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
typedef LPCH LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
typedef SHORT *PSHORT;
typedef LONG *PLONG;
typedef void *HANDLE;
typedef HANDLE *PHANDLE;
typedef BYTE   FCHAR;
typedef WORD   FSHORT;
typedef DWORD  FLONG;
typedef  long HRESULT;
typedef char CCHAR;
typedef DWORD LCID;
typedef PDWORD PLCID;
typedef WORD   LANGID;
typedef struct _FLOAT128 {
    __int64 LowPart;
    __int64 HighPart;
} FLOAT128;
typedef FLOAT128 *PFLOAT128;
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
typedef LONGLONG *PLONGLONG;
typedef ULONGLONG *PULONGLONG;
typedef LONGLONG USN;
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    };
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;
typedef LARGE_INTEGER *PLARGE_INTEGER;
typedef union _ULARGE_INTEGER {
    struct {
        DWORD LowPart;
        DWORD HighPart;
    };
    struct {
        DWORD LowPart;
        DWORD HighPart;
    } u;
    ULONGLONG QuadPart;
} ULARGE_INTEGER;
typedef ULARGE_INTEGER *PULARGE_INTEGER;
typedef struct _LUID {
    DWORD LowPart;
    LONG HighPart;
} LUID, *PLUID;
typedef ULONGLONG  DWORDLONG;
typedef DWORDLONG *PDWORDLONG;
ULONGLONG

Int64ShllMod32 (
    ULONGLONG Value,
    DWORD ShiftCount
    );
LONGLONG

Int64ShraMod32 (
    LONGLONG Value,
    DWORD ShiftCount
    );
ULONGLONG

Int64ShrlMod32 (
    ULONGLONG Value,
    DWORD ShiftCount
    );
__inline ULONGLONG

Int64ShllMod32 (
    ULONGLONG Value,
    DWORD ShiftCount
    )
{
    __asm    {
        mov     ecx, ShiftCount
        mov     eax, dword ptr [Value]
        mov     edx, dword ptr [Value+4]
        shld    edx, eax, cl
        shl     eax, cl
    }
}
__inline LONGLONG

Int64ShraMod32 (
    LONGLONG Value,
    DWORD ShiftCount
    )
{
    __asm {
        mov     ecx, ShiftCount
        mov     eax, dword ptr [Value]
        mov     edx, dword ptr [Value+4]
        shrd    eax, edx, cl
        sar     edx, cl
    }
}
__inline ULONGLONG

Int64ShrlMod32 (
    ULONGLONG Value,
    DWORD ShiftCount
    )
{
    __asm    {
        mov     ecx, ShiftCount
        mov     eax, dword ptr [Value]
        mov     edx, dword ptr [Value+4]
        shrd    eax, edx, cl
        shr     edx, cl
    }
}
unsigned int
__cdecl
_rotl (
     unsigned int Value,
     int Shift
    );
unsigned __int64
__cdecl
_rotl64 (
     unsigned __int64 Value,
     int Shift
    );
unsigned int
__cdecl
_rotr (
     unsigned int Value,
     int Shift
    );
unsigned __int64
__cdecl
_rotr64 (
     unsigned __int64 Value,
     int Shift
    );
typedef BYTE  BOOLEAN;
typedef BOOLEAN *PBOOLEAN;
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY, * PRLIST_ENTRY;
typedef struct _SINGLE_LIST_ENTRY {
    struct _SINGLE_LIST_ENTRY *Next;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
typedef struct LIST_ENTRY32 {
    DWORD Flink;
    DWORD Blink;
} LIST_ENTRY32;
typedef LIST_ENTRY32 *PLIST_ENTRY32;
typedef struct LIST_ENTRY64 {
    ULONGLONG Flink;
    ULONGLONG Blink;
} LIST_ENTRY64;
typedef LIST_ENTRY64 *PLIST_ENTRY64;
typedef struct _GUID {
    unsigned long  Data1;
    unsigned short Data2;
    unsigned short Data3;
    unsigned char  Data4[ 8 ];
} GUID;
typedef GUID *LPGUID;
typedef const GUID *LPCGUID;
typedef GUID IID;
typedef IID *LPIID;
typedef GUID CLSID;
typedef CLSID *LPCLSID;
typedef GUID FMTID;
typedef FMTID *LPFMTID;
 void *  __cdecl _memccpy( void * _Dst, const void * _Src, int _Val, size_t _MaxCount);
  void *  __cdecl memchr( const void * _Buf , int _Val, size_t _MaxCount);
 int     __cdecl _memicmp(const void * _Buf1, const void * _Buf2, size_t _Size);
 int     __cdecl _memicmp_l(const void * _Buf1, const void * _Buf2, size_t _Size, _locale_t _Locale);
        int     __cdecl memcmp(const void * _Buf1, const void * _Buf2, size_t _Size);
         void *  __cdecl memcpy(void * _Dst, const void * _Src, size_t _Size);
 errno_t  __cdecl memcpy_s(void * _Dst, rsize_t _DstSize, const void * _Src, rsize_t _MaxCount);
        void *  __cdecl memset(void * _Dst, int _Val, size_t _Size);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_memccpy" ". See online help for details."))  void * __cdecl memccpy(void * _Dst, const void * _Src, int _Val, size_t _Size);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_memicmp" ". See online help for details."))  int __cdecl memicmp(const void * _Buf1, const void * _Buf2, size_t _Size);
  errno_t __cdecl _strset_s(char * _Dst, size_t _DstSize, int _Value);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strset(char *_Dest, int _Value);
  errno_t __cdecl strcpy_s(char * _Dst, rsize_t _SizeInBytes, const char * _Src);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl strcpy(char *_Dest, const char * _Source);
  errno_t __cdecl strcat_s(char * _Dst, rsize_t _SizeInBytes, const char * _Src);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl strcat(char *_Dest, const char * _Source);
        int     __cdecl strcmp(const char * _Str1, const char * _Str2);
        size_t  __cdecl strlen(const char * _Str);
 size_t  __cdecl strnlen(const char * _Str, size_t _MaxCount);
static __inline size_t  __cdecl strnlen_s( const char * _Str, size_t _MaxCount)
{
    return (_Str==0) ? 0 : strnlen(_Str, _MaxCount);
}
  errno_t __cdecl memmove_s(void * _Dst, rsize_t _DstSize, const void * _Src, rsize_t _MaxCount);
  void *  __cdecl memmove(void * _Dst, const void * _Src, size_t _Size);
 char *  __cdecl _strdup(const char * _Src);
  char *  __cdecl strchr(const char * _Str, int _Val);
 int     __cdecl _stricmp( const char * _Str1,  const char * _Str2);
 int     __cdecl _strcmpi( const char * _Str1,  const char * _Str2);
 int     __cdecl _stricmp_l( const char * _Str1,  const char * _Str2, _locale_t _Locale);
 int     __cdecl strcoll( const char * _Str1,  const  char * _Str2);
 int     __cdecl _strcoll_l( const char * _Str1,  const char * _Str2, _locale_t _Locale);
 int     __cdecl _stricoll( const char * _Str1,  const char * _Str2);
 int     __cdecl _stricoll_l( const char * _Str1,  const char * _Str2, _locale_t _Locale);
 int     __cdecl _strncoll  (const char * _Str1, const char * _Str2, size_t _MaxCount);
 int     __cdecl _strncoll_l(const char * _Str1, const char * _Str2, size_t _MaxCount, _locale_t _Locale);
 int     __cdecl _strnicoll (const char * _Str1, const char * _Str2, size_t _MaxCount);
 int     __cdecl _strnicoll_l(const char * _Str1, const char * _Str2, size_t _MaxCount, _locale_t _Locale);
 size_t  __cdecl strcspn( const char * _Str,  const char * _Control);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char *  __cdecl _strerror(const char * _ErrMsg);
  errno_t __cdecl _strerror_s(char * _Buf, size_t _SizeInBytes, const char * _ErrMsg);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char *  __cdecl strerror(int);
  errno_t __cdecl strerror_s(char * _Buf, size_t _SizeInBytes, int _ErrNum);
  errno_t __cdecl _strlwr_s(char * _Str, size_t _Size);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strlwr(char *_String);
  errno_t __cdecl _strlwr_s_l(char * _Str, size_t _Size, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strlwr_l(char *_String, _locale_t _Locale);
  errno_t __cdecl strncat_s(char * _Dst, rsize_t _SizeInBytes, const char * _Src, rsize_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl strncat(char *_Dest, const char * _Source, size_t _Count);
 int     __cdecl strncmp(const char * _Str1, const char * _Str2, size_t _MaxCount);
 int     __cdecl _strnicmp(const char * _Str1, const char * _Str2, size_t _MaxCount);
 int     __cdecl _strnicmp_l(const char * _Str1, const char * _Str2, size_t _MaxCount, _locale_t _Locale);
  errno_t __cdecl strncpy_s(char * _Dst, rsize_t _SizeInBytes, const char * _Src, rsize_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl strncpy(char *_Dest, const char * _Source, size_t _Count);
  errno_t __cdecl _strnset_s(char * _Str, size_t _SizeInBytes, int _Val, size_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strnset(char *_Dest, int _Val, size_t _Count);
  char *  __cdecl strpbrk(const char * _Str, const char * _Control);
  char *  __cdecl strrchr(const char * _Str, int _Ch);
 char *  __cdecl _strrev(char * _Str);
 size_t  __cdecl strspn(const char * _Str, const char * _Control);
  char *  __cdecl strstr(const char * _Str, const char * _SubStr);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "strtok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char *  __cdecl strtok(char * _Str, const char * _Delim);
 char *  __cdecl strtok_s(char * _Str, const char * _Delim, char ** _Context);
  errno_t __cdecl _strupr_s(char * _Str, size_t _Size);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strupr(char *_String);
  errno_t __cdecl _strupr_s_l(char * _Str, size_t _Size, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _strupr_l(char *_String, _locale_t _Locale);
  size_t  __cdecl strxfrm (char * _Dst, const char * _Src, size_t _MaxCount);
  size_t  __cdecl _strxfrm_l(char * _Dst, const char * _Src, size_t _MaxCount, _locale_t _Locale);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strdup" ". See online help for details."))  char * __cdecl strdup(const char * _Src);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strcmpi" ". See online help for details."))  int __cdecl strcmpi(const char * _Str1, const char * _Str2);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_stricmp" ". See online help for details."))  int __cdecl stricmp(const char * _Str1, const char * _Str2);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strlwr" ". See online help for details."))  char * __cdecl strlwr(char * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strnicmp" ". See online help for details."))  int __cdecl strnicmp(const char * _Str1, const char * _Str, size_t _MaxCount);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strnset" ". See online help for details."))  char * __cdecl strnset(char * _Str, int _Val, size_t _MaxCount);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strrev" ". See online help for details."))  char * __cdecl strrev(char * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strset" ". See online help for details."))         char * __cdecl strset(char * _Str, int _Val);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strupr" ". See online help for details."))  char * __cdecl strupr(char * _Str);
 wchar_t * __cdecl _wcsdup(const wchar_t * _Str);
  errno_t __cdecl wcscat_s(wchar_t * _Dst, rsize_t _SizeInWords, const wchar_t * _Src);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl wcscat(wchar_t *_Dest, const wchar_t * _Source);
  wchar_t * __cdecl wcschr(const wchar_t * _Str, wchar_t _Ch);
 int __cdecl wcscmp(const wchar_t * _Str1, const wchar_t * _Str2);
  errno_t __cdecl wcscpy_s(wchar_t * _Dst, rsize_t _SizeInWords, const wchar_t * _Src);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl wcscpy(wchar_t *_Dest, const wchar_t * _Source);
 size_t __cdecl wcscspn(const wchar_t * _Str, const wchar_t * _Control);
 size_t __cdecl wcslen(const wchar_t * _Str);
 size_t __cdecl wcsnlen(const wchar_t * _Src, size_t _MaxCount);
static __inline size_t __cdecl wcsnlen_s(const wchar_t * _Src, size_t _MaxCount)
{
    return (_Src == ((void *)0)) ? 0 : wcsnlen(_Src, _MaxCount);
}
  errno_t __cdecl wcsncat_s(wchar_t * _Dst, rsize_t _SizeInWords, const wchar_t * _Src, rsize_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl wcsncat(wchar_t *_Dest, const wchar_t * _Source, size_t _Count);
 int __cdecl wcsncmp(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount);
  errno_t __cdecl wcsncpy_s(wchar_t * _Dst, rsize_t _SizeInWords, const wchar_t * _Src, rsize_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl wcsncpy(wchar_t *_Dest, const wchar_t * _Source, size_t _Count);
  wchar_t * __cdecl wcspbrk(const wchar_t * _Str, const wchar_t * _Control);
  wchar_t * __cdecl wcsrchr(const wchar_t * _Str, wchar_t _Ch);
 size_t __cdecl wcsspn(const wchar_t * _Str, const wchar_t * _Control);
  wchar_t * __cdecl wcsstr(const wchar_t * _Str, const wchar_t * _SubStr);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl wcstok(wchar_t * _Str, const wchar_t * _Delim);
 wchar_t * __cdecl wcstok_s(wchar_t * _Str, const wchar_t * _Delim, wchar_t ** _Context);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcserror(int _ErrNum);
  errno_t __cdecl _wcserror_s(wchar_t * _Buf, size_t _SizeInWords, int _ErrNum);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "__wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl __wcserror(const wchar_t * _Str);
  errno_t __cdecl __wcserror_s(wchar_t * _Buffer, size_t _SizeInWords, const wchar_t * _ErrMsg);
 int __cdecl _wcsicmp(const wchar_t * _Str1, const wchar_t * _Str2);
 int __cdecl _wcsicmp_l(const wchar_t * _Str1, const wchar_t * _Str2, _locale_t _Locale);
 int __cdecl _wcsnicmp(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount);
 int __cdecl _wcsnicmp_l(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount, _locale_t _Locale);
  errno_t __cdecl _wcsnset_s(wchar_t * _Dst, size_t _SizeInWords, wchar_t _Val, size_t _MaxCount);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcsnset(wchar_t *_Str, wchar_t _Val, size_t _MaxCount);
 wchar_t * __cdecl _wcsrev(wchar_t * _Str);
  errno_t __cdecl _wcsset_s(wchar_t * _Dst, size_t _SizeInWords, wchar_t _Value);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcsset(wchar_t *_Str, wchar_t _Val);
  errno_t __cdecl _wcslwr_s(wchar_t * _Str, size_t _SizeInWords);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcslwr(wchar_t *_String);
  errno_t __cdecl _wcslwr_s_l(wchar_t * _Str, size_t _SizeInWords, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcslwr_l(wchar_t *_String, _locale_t _Locale);
  errno_t __cdecl _wcsupr_s(wchar_t * _Str, size_t _Size);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcsupr(wchar_t *_String);
  errno_t __cdecl _wcsupr_s_l(wchar_t * _Str, size_t _Size, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _wcsupr_l(wchar_t *_String, _locale_t _Locale);
  size_t __cdecl wcsxfrm(wchar_t * _Dst, const wchar_t * _Src, size_t _MaxCount);
  size_t __cdecl _wcsxfrm_l(wchar_t * _Dst, const wchar_t *_Src, size_t _MaxCount, _locale_t _Locale);
 int __cdecl wcscoll(const wchar_t * _Str1, const wchar_t * _Str2);
 int __cdecl _wcscoll_l(const wchar_t * _Str1, const wchar_t * _Str2, _locale_t _Locale);
 int __cdecl _wcsicoll(const wchar_t * _Str1, const wchar_t * _Str2);
 int __cdecl _wcsicoll_l(const wchar_t * _Str1, const wchar_t *_Str2, _locale_t _Locale);
 int __cdecl _wcsncoll(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount);
 int __cdecl _wcsncoll_l(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount, _locale_t _Locale);
 int __cdecl _wcsnicoll(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount);
 int __cdecl _wcsnicoll_l(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount, _locale_t _Locale);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsdup" ". See online help for details."))  wchar_t * __cdecl wcsdup(const wchar_t * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsicmp" ". See online help for details."))  int __cdecl wcsicmp(const wchar_t * _Str1, const wchar_t * _Str2);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsnicmp" ". See online help for details."))  int __cdecl wcsnicmp(const wchar_t * _Str1, const wchar_t * _Str2, size_t _MaxCount);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsnset" ". See online help for details."))  wchar_t * __cdecl wcsnset(wchar_t * _Str, wchar_t _Val, size_t _MaxCount);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsrev" ". See online help for details."))  wchar_t * __cdecl wcsrev(wchar_t * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsset" ". See online help for details."))  wchar_t * __cdecl wcsset(wchar_t * _Str, wchar_t _Val);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcslwr" ". See online help for details."))  wchar_t * __cdecl wcslwr(wchar_t * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsupr" ". See online help for details."))  wchar_t * __cdecl wcsupr(wchar_t * _Str);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsicoll" ". See online help for details."))  int __cdecl wcsicoll(const wchar_t * _Str1, const wchar_t * _Str2);
typedef struct  _OBJECTID {
    GUID Lineage;
    DWORD Uniquifier;
} OBJECTID;
typedef ULONG_PTR KSPIN_LOCK;
typedef KSPIN_LOCK *PKSPIN_LOCK;
BOOLEAN
_bittest (
     LONG const *Base,
     LONG Offset
    );
BOOLEAN
_bittestandcomplement (
     LONG *Base,
     LONG Offset
    );
BOOLEAN
_bittestandset (
     LONG *Base,
     LONG Offset
    );
BOOLEAN
_bittestandreset (
     LONG *Base,
     LONG Offset
    );
BOOLEAN
_interlockedbittestandset (
     LONG volatile *Base,
     LONG Offset
    );
BOOLEAN
_interlockedbittestandreset (
     LONG volatile *Base,
     LONG Offset
    );
BOOLEAN
_BitScanForward (
     DWORD *Index,
     DWORD Mask
    );
BOOLEAN
_BitScanReverse (
     DWORD *Index,
     DWORD Mask
    );
SHORT
_InterlockedCompareExchange16 (
     SHORT volatile *Destination,
     SHORT ExChange,
     SHORT Comperand
    );
__inline
BOOLEAN
InterlockedBitTestAndComplement (
     LONG volatile *Base,
     LONG Bit
    )
{
    __asm {
           mov eax, Bit
           mov ecx, Base
           lock btc [ecx], eax
           setc al
    };
}
BYTE
__readfsbyte (
     DWORD Offset
    );
WORD
__readfsword (
     DWORD Offset
    );
DWORD
__readfsdword (
     DWORD Offset
    );
void
__writefsbyte (
     DWORD Offset,
     BYTE  Data
    );
void
__writefsword (
     DWORD Offset,
     WORD   Data
    );
void
__writefsdword (
     DWORD Offset,
     DWORD Data
    );
void
__incfsbyte (
    DWORD Offset
    );
void
__addfsbyte (
    DWORD Offset,
    BYTE  Value
    );
void
__incfsword (
    DWORD Offset
    );
void
__addfsword (
    DWORD Offset,
    WORD   Value
    );
void
__incfsdword (
    DWORD Offset
    );
void
__addfsdword (
    DWORD Offset,
    DWORD Value
    );
void
_mm_pause (
    void
    );
__inline
void
MemoryBarrier (
    void
    )
{
    LONG Barrier;
    __asm {
        xchg Barrier, eax
    }
}
DWORD64
__readpmc (
     DWORD Counter
    );
DWORD64
__rdtsc (
    void
    );
void
__int2c (
    void
    );
__inline PVOID GetFiberData( void )    { return *(PVOID *) (ULONG_PTR) __readfsdword (0x10);}
__inline PVOID GetCurrentFiber( void ) { return (PVOID) (ULONG_PTR) __readfsdword (0x10);}
typedef struct _FLOATING_SAVE_AREA {
    DWORD   ControlWord;
    DWORD   StatusWord;
    DWORD   TagWord;
    DWORD   ErrorOffset;
    DWORD   ErrorSelector;
    DWORD   DataOffset;
    DWORD   DataSelector;
    BYTE    RegisterArea[80];
    DWORD   Cr0NpxState;
} FLOATING_SAVE_AREA;
typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
typedef struct _CONTEXT {
    DWORD ContextFlags;
    DWORD   Dr0;
    DWORD   Dr1;
    DWORD   Dr2;
    DWORD   Dr3;
    DWORD   Dr6;
    DWORD   Dr7;
    FLOATING_SAVE_AREA FloatSave;
    DWORD   SegGs;
    DWORD   SegFs;
    DWORD   SegEs;
    DWORD   SegDs;
    DWORD   Edi;
    DWORD   Esi;
    DWORD   Ebx;
    DWORD   Edx;
    DWORD   Ecx;
    DWORD   Eax;
    DWORD   Ebp;
    DWORD   Eip;
    DWORD   SegCs;
    DWORD   EFlags;
    DWORD   Esp;
    DWORD   SegSs;
    BYTE    ExtendedRegisters[512];
} CONTEXT;
typedef CONTEXT *PCONTEXT;
typedef struct _LDT_ENTRY {
    WORD    LimitLow;
    WORD    BaseLow;
    union {
        struct {
            BYTE    BaseMid;
            BYTE    Flags1;
            BYTE    Flags2;
            BYTE    BaseHi;
        } Bytes;
        struct {
            DWORD   BaseMid : 8;
            DWORD   Type : 5;
            DWORD   Dpl : 2;
            DWORD   Pres : 1;
            DWORD   LimitHi : 4;
            DWORD   Sys : 1;
            DWORD   Reserved_0 : 1;
            DWORD   Default_Big : 1;
            DWORD   Granularity : 1;
            DWORD   BaseHi : 8;
        } Bits;
    } HighWord;
} LDT_ENTRY, *PLDT_ENTRY;
typedef struct _WOW64_FLOATING_SAVE_AREA {
    DWORD   ControlWord;
    DWORD   StatusWord;
    DWORD   TagWord;
    DWORD   ErrorOffset;
    DWORD   ErrorSelector;
    DWORD   DataOffset;
    DWORD   DataSelector;
    BYTE    RegisterArea[80];
    DWORD   Cr0NpxState;
} WOW64_FLOATING_SAVE_AREA;
typedef WOW64_FLOATING_SAVE_AREA *PWOW64_FLOATING_SAVE_AREA;
typedef struct _WOW64_CONTEXT {
    DWORD ContextFlags;
    DWORD   Dr0;
    DWORD   Dr1;
    DWORD   Dr2;
    DWORD   Dr3;
    DWORD   Dr6;
    DWORD   Dr7;
    WOW64_FLOATING_SAVE_AREA FloatSave;
    DWORD   SegGs;
    DWORD   SegFs;
    DWORD   SegEs;
    DWORD   SegDs;
    DWORD   Edi;
    DWORD   Esi;
    DWORD   Ebx;
    DWORD   Edx;
    DWORD   Ecx;
    DWORD   Eax;
    DWORD   Ebp;
    DWORD   Eip;
    DWORD   SegCs;
    DWORD   EFlags;
    DWORD   Esp;
    DWORD   SegSs;
    BYTE    ExtendedRegisters[512];
} WOW64_CONTEXT;
typedef WOW64_CONTEXT *PWOW64_CONTEXT;
typedef struct _EXCEPTION_RECORD {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    struct _EXCEPTION_RECORD *ExceptionRecord;
    PVOID ExceptionAddress;
    DWORD NumberParameters;
    ULONG_PTR ExceptionInformation[15];
    } EXCEPTION_RECORD;
typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[15];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[15];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
typedef struct _EXCEPTION_POINTERS {
    PEXCEPTION_RECORD ExceptionRecord;
    PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
typedef PVOID PACCESS_TOKEN;
typedef PVOID PSECURITY_DESCRIPTOR;
typedef PVOID PSID;
typedef DWORD ACCESS_MASK;
typedef ACCESS_MASK *PACCESS_MASK;
typedef struct _GENERIC_MAPPING {
    ACCESS_MASK GenericRead;
    ACCESS_MASK GenericWrite;
    ACCESS_MASK GenericExecute;
    ACCESS_MASK GenericAll;
} GENERIC_MAPPING;
typedef GENERIC_MAPPING *PGENERIC_MAPPING;
typedef struct _LUID_AND_ATTRIBUTES {
    LUID Luid;
    DWORD Attributes;
    } LUID_AND_ATTRIBUTES, * PLUID_AND_ATTRIBUTES;
typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[1];
typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
typedef struct _SID_IDENTIFIER_AUTHORITY {
    BYTE  Value[6];
} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
typedef struct _SID {
   BYTE  Revision;
   BYTE  SubAuthorityCount;
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
   DWORD SubAuthority[1];
} SID, *PISID;
typedef enum _SID_NAME_USE {
    SidTypeUser = 1,
    SidTypeGroup,
    SidTypeDomain,
    SidTypeAlias,
    SidTypeWellKnownGroup,
    SidTypeDeletedAccount,
    SidTypeInvalid,
    SidTypeUnknown,
    SidTypeComputer,
    SidTypeLabel
} SID_NAME_USE, *PSID_NAME_USE;
typedef struct _SID_AND_ATTRIBUTES {
    PSID Sid;
    DWORD Attributes;
    } SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES;
typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[1];
typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
typedef struct _SID_AND_ATTRIBUTES_HASH {
    DWORD SidCount;
    PSID_AND_ATTRIBUTES SidAttr;
    SID_HASH_ENTRY Hash[32];
} SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;


typedef enum {
    WinNullSid                                  = 0,
    WinWorldSid                                 = 1,
    WinLocalSid                                 = 2,
    WinCreatorOwnerSid                          = 3,
    WinCreatorGroupSid                          = 4,
    WinCreatorOwnerServerSid                    = 5,
    WinCreatorGroupServerSid                    = 6,
    WinNtAuthoritySid                           = 7,
    WinDialupSid                                = 8,
    WinNetworkSid                               = 9,
    WinBatchSid                                 = 10,
    WinInteractiveSid                           = 11,
    WinServiceSid                               = 12,
    WinAnonymousSid                             = 13,
    WinProxySid                                 = 14,
    WinEnterpriseControllersSid                 = 15,
    WinSelfSid                                  = 16,
    WinAuthenticatedUserSid                     = 17,
    WinRestrictedCodeSid                        = 18,
    WinTerminalServerSid                        = 19,
    WinRemoteLogonIdSid                         = 20,
    WinLogonIdsSid                              = 21,
    WinLocalSystemSid                           = 22,
    WinLocalServiceSid                          = 23,
    WinNetworkServiceSid                        = 24,
    WinBuiltinDomainSid                         = 25,
    WinBuiltinAdministratorsSid                 = 26,
    WinBuiltinUsersSid                          = 27,
    WinBuiltinGuestsSid                         = 28,
    WinBuiltinPowerUsersSid                     = 29,
    WinBuiltinAccountOperatorsSid               = 30,
    WinBuiltinSystemOperatorsSid                = 31,
    WinBuiltinPrintOperatorsSid                 = 32,
    WinBuiltinBackupOperatorsSid                = 33,
    WinBuiltinReplicatorSid                     = 34,
    WinBuiltinPreWindows2000CompatibleAccessSid = 35,
    WinBuiltinRemoteDesktopUsersSid             = 36,
    WinBuiltinNetworkConfigurationOperatorsSid  = 37,
    WinAccountAdministratorSid                  = 38,
    WinAccountGuestSid                          = 39,
    WinAccountKrbtgtSid                         = 40,
    WinAccountDomainAdminsSid                   = 41,
    WinAccountDomainUsersSid                    = 42,
    WinAccountDomainGuestsSid                   = 43,
    WinAccountComputersSid                      = 44,
    WinAccountControllersSid                    = 45,
    WinAccountCertAdminsSid                     = 46,
    WinAccountSchemaAdminsSid                   = 47,
    WinAccountEnterpriseAdminsSid               = 48,
    WinAccountPolicyAdminsSid                   = 49,
    WinAccountRasAndIasServersSid               = 50,
    WinNTLMAuthenticationSid                    = 51,
    WinDigestAuthenticationSid                  = 52,
    WinSChannelAuthenticationSid                = 53,
    WinThisOrganizationSid                      = 54,
    WinOtherOrganizationSid                     = 55,
    WinBuiltinIncomingForestTrustBuildersSid    = 56,
    WinBuiltinPerfMonitoringUsersSid            = 57,
    WinBuiltinPerfLoggingUsersSid               = 58,
    WinBuiltinAuthorizationAccessSid            = 59,
    WinBuiltinTerminalServerLicenseServersSid   = 60,
    WinBuiltinDCOMUsersSid                      = 61,
    WinBuiltinIUsersSid                         = 62,
    WinIUserSid                                 = 63,
    WinBuiltinCryptoOperatorsSid                = 64,
    WinUntrustedLabelSid                        = 65,
    WinLowLabelSid                              = 66,
    WinMediumLabelSid                           = 67,
    WinHighLabelSid                             = 68,
    WinSystemLabelSid                           = 69,
    WinWriteRestrictedCodeSid                   = 70,
    WinCreatorOwnerRightsSid                    = 71,
    WinCacheablePrincipalsGroupSid              = 72,
    WinNonCacheablePrincipalsGroupSid           = 73,
    WinEnterpriseReadonlyControllersSid         = 74,
    WinAccountReadonlyControllersSid            = 75,
    WinBuiltinEventLogReadersGroup              = 76,
} WELL_KNOWN_SID_TYPE;

typedef struct _ACL {
    BYTE  AclRevision;
    BYTE  Sbz1;
    WORD   AclSize;
    WORD   AceCount;
    WORD   Sbz2;
} ACL;
typedef ACL *PACL;
typedef struct _ACE_HEADER {
    BYTE  AceType;
    BYTE  AceFlags;
    WORD   AceSize;
} ACE_HEADER;
typedef ACE_HEADER *PACE_HEADER;
typedef struct _ACCESS_ALLOWED_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} ACCESS_ALLOWED_ACE;
typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
typedef struct _ACCESS_DENIED_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} ACCESS_DENIED_ACE;
typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
typedef struct _SYSTEM_AUDIT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} SYSTEM_AUDIT_ACE;
typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
typedef struct _SYSTEM_ALARM_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} SYSTEM_ALARM_ACE;
typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} ACCESS_ALLOWED_OBJECT_ACE, *PACCESS_ALLOWED_OBJECT_ACE;
typedef struct _ACCESS_DENIED_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} ACCESS_DENIED_OBJECT_ACE, *PACCESS_DENIED_OBJECT_ACE;
typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_AUDIT_OBJECT_ACE, *PSYSTEM_AUDIT_OBJECT_ACE;
typedef struct _SYSTEM_ALARM_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_ALARM_OBJECT_ACE, *PSYSTEM_ALARM_OBJECT_ACE;
typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
typedef struct _ACCESS_DENIED_CALLBACK_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD SidStart;
} SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    ACCESS_MASK Mask;
    DWORD Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;

typedef enum _ACL_INFORMATION_CLASS {
    AclRevisionInformation = 1,
    AclSizeInformation
} ACL_INFORMATION_CLASS;
typedef struct _ACL_REVISION_INFORMATION {
    DWORD AclRevision;
} ACL_REVISION_INFORMATION;
typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
typedef struct _ACL_SIZE_INFORMATION {
    DWORD AceCount;
    DWORD AclBytesInUse;
    DWORD AclBytesFree;
} ACL_SIZE_INFORMATION;
typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
typedef WORD   SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
    BYTE  Revision;
    BYTE  Sbz1;
    SECURITY_DESCRIPTOR_CONTROL Control;
    DWORD Owner;
    DWORD Group;
    DWORD Sacl;
    DWORD Dacl;
    } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
typedef struct _SECURITY_DESCRIPTOR {
   BYTE  Revision;
   BYTE  Sbz1;
   SECURITY_DESCRIPTOR_CONTROL Control;
   PSID Owner;
   PSID Group;
   PACL Sacl;
   PACL Dacl;
   } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
typedef struct _OBJECT_TYPE_LIST {
    WORD   Level;
    WORD   Sbz;
    GUID *ObjectType;
} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
typedef enum _AUDIT_EVENT_TYPE {
    AuditEventObjectAccess,
    AuditEventDirectoryServiceAccess
} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
typedef struct _PRIVILEGE_SET {
    DWORD PrivilegeCount;
    DWORD Control;
    LUID_AND_ATTRIBUTES Privilege[1];
    } PRIVILEGE_SET, * PPRIVILEGE_SET;
typedef enum _SECURITY_IMPERSONATION_LEVEL {
    SecurityAnonymous,
    SecurityIdentification,
    SecurityImpersonation,
    SecurityDelegation
    } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
typedef enum _TOKEN_TYPE {
    TokenPrimary = 1,
    TokenImpersonation
    } TOKEN_TYPE;
typedef TOKEN_TYPE *PTOKEN_TYPE;
typedef enum _TOKEN_ELEVATION_TYPE {
    TokenElevationTypeDefault = 1,
    TokenElevationTypeFull,
    TokenElevationTypeLimited,
} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
typedef enum _TOKEN_INFORMATION_CLASS {
    TokenUser = 1,
    TokenGroups,
    TokenPrivileges,
    TokenOwner,
    TokenPrimaryGroup,
    TokenDefaultDacl,
    TokenSource,
    TokenType,
    TokenImpersonationLevel,
    TokenStatistics,
    TokenRestrictedSids,
    TokenSessionId,
    TokenGroupsAndPrivileges,
    TokenSessionReference,
    TokenSandBoxInert,
    TokenAuditPolicy,
    TokenOrigin,
    TokenElevationType,
    TokenLinkedToken,
    TokenElevation,
    TokenHasRestrictions,
    TokenAccessInformation,
    TokenVirtualizationAllowed,
    TokenVirtualizationEnabled,
    TokenIntegrityLevel,
    TokenUIAccess,
    TokenMandatoryPolicy,
    TokenLogonSid,
    MaxTokenInfoClass
} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
typedef struct _TOKEN_USER {
    SID_AND_ATTRIBUTES User;
} TOKEN_USER, *PTOKEN_USER;
typedef struct _TOKEN_GROUPS {
    DWORD GroupCount;
    SID_AND_ATTRIBUTES Groups[1];
} TOKEN_GROUPS, *PTOKEN_GROUPS;
typedef struct _TOKEN_PRIVILEGES {
    DWORD PrivilegeCount;
    LUID_AND_ATTRIBUTES Privileges[1];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
typedef struct _TOKEN_OWNER {
    PSID Owner;
} TOKEN_OWNER, *PTOKEN_OWNER;
typedef struct _TOKEN_PRIMARY_GROUP {
    PSID PrimaryGroup;
} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
typedef struct _TOKEN_DEFAULT_DACL {
    PACL DefaultDacl;
} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
    DWORD SidCount;
    DWORD SidLength;
    PSID_AND_ATTRIBUTES Sids;
    DWORD RestrictedSidCount;
    DWORD RestrictedSidLength;
    PSID_AND_ATTRIBUTES RestrictedSids;
    DWORD PrivilegeCount;
    DWORD PrivilegeLength;
    PLUID_AND_ATTRIBUTES Privileges;
    LUID AuthenticationId;
} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
typedef struct _TOKEN_LINKED_TOKEN {
    HANDLE LinkedToken;
} TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
typedef struct _TOKEN_ELEVATION {
    DWORD TokenIsElevated;
} TOKEN_ELEVATION, *PTOKEN_ELEVATION;
typedef struct _TOKEN_MANDATORY_LABEL {
    SID_AND_ATTRIBUTES Label;
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
typedef struct _TOKEN_MANDATORY_POLICY {
    DWORD Policy;
} TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
typedef struct _TOKEN_ACCESS_INFORMATION {
    PSID_AND_ATTRIBUTES_HASH SidHash;
    PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
    PTOKEN_PRIVILEGES Privileges;
    LUID AuthenticationId;
    TOKEN_TYPE TokenType;
    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
    TOKEN_MANDATORY_POLICY MandatoryPolicy;
    DWORD Flags;
} TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
typedef struct _TOKEN_AUDIT_POLICY {
    BYTE  PerUserPolicy[(((50)) >> 1) + 1];
} TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
typedef struct _TOKEN_SOURCE {
    CHAR SourceName[8];
    LUID SourceIdentifier;
} TOKEN_SOURCE, *PTOKEN_SOURCE;
typedef struct _TOKEN_STATISTICS {
    LUID TokenId;
    LUID AuthenticationId;
    LARGE_INTEGER ExpirationTime;
    TOKEN_TYPE TokenType;
    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
    DWORD DynamicCharged;
    DWORD DynamicAvailable;
    DWORD GroupCount;
    DWORD PrivilegeCount;
    LUID ModifiedId;
} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
typedef struct _TOKEN_CONTROL {
    LUID TokenId;
    LUID AuthenticationId;
    LUID ModifiedId;
    TOKEN_SOURCE TokenSource;
} TOKEN_CONTROL, *PTOKEN_CONTROL;
typedef struct _TOKEN_ORIGIN {
    LUID OriginatingLogonSession ;
} TOKEN_ORIGIN, * PTOKEN_ORIGIN ;
typedef enum _MANDATORY_LEVEL {
    MandatoryLevelUntrusted = 0,
    MandatoryLevelLow,
    MandatoryLevelMedium,
    MandatoryLevelHigh,
    MandatoryLevelSystem,
    MandatoryLevelSecureProcess,
    MandatoryLevelCount
} MANDATORY_LEVEL, *PMANDATORY_LEVEL;
typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
                    * PSECURITY_CONTEXT_TRACKING_MODE;
typedef struct _SECURITY_QUALITY_OF_SERVICE {
    DWORD Length;
    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
    SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
    BOOLEAN EffectiveOnly;
    } SECURITY_QUALITY_OF_SERVICE, * PSECURITY_QUALITY_OF_SERVICE;
typedef struct _SE_IMPERSONATION_STATE {
    PACCESS_TOKEN Token;
    BOOLEAN CopyOnOpen;
    BOOLEAN EffectiveOnly;
    SECURITY_IMPERSONATION_LEVEL Level;
} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
typedef struct _JOB_SET_ARRAY {
    HANDLE JobHandle;
    DWORD MemberLevel;
    DWORD Flags;
} JOB_SET_ARRAY, *PJOB_SET_ARRAY;
typedef struct _NT_TIB {
    struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
    PVOID StackBase;
    PVOID StackLimit;
    PVOID SubSystemTib;
    union {
        PVOID FiberData;
        DWORD Version;
    };
    PVOID ArbitraryUserPointer;
    struct _NT_TIB *Self;
} NT_TIB;
typedef NT_TIB *PNT_TIB;
typedef struct _NT_TIB32 {
    DWORD ExceptionList;
    DWORD StackBase;
    DWORD StackLimit;
    DWORD SubSystemTib;
    union {
        DWORD FiberData;
        DWORD Version;
    };
    DWORD ArbitraryUserPointer;
    DWORD Self;
} NT_TIB32, *PNT_TIB32;
typedef struct _NT_TIB64 {
    DWORD64 ExceptionList;
    DWORD64 StackBase;
    DWORD64 StackLimit;
    DWORD64 SubSystemTib;
    union {
        DWORD64 FiberData;
        DWORD Version;
    };
    DWORD64 ArbitraryUserPointer;
    DWORD64 Self;
} NT_TIB64, *PNT_TIB64;
typedef struct _QUOTA_LIMITS {
    SIZE_T PagedPoolLimit;
    SIZE_T NonPagedPoolLimit;
    SIZE_T MinimumWorkingSetSize;
    SIZE_T MaximumWorkingSetSize;
    SIZE_T PagefileLimit;
    LARGE_INTEGER TimeLimit;
} QUOTA_LIMITS, *PQUOTA_LIMITS;
typedef enum _PS_RATE_PHASE {
    PsRateOneSecond = 0,
    PsRateTwoSecond,
    PsRateThreeSecond,
    PsRateMaxPhase
} PS_RATE_PHASE;
typedef union _RATE_QUOTA_LIMIT {
    DWORD RateData;
    struct {
        DWORD RatePhase     : 4;
        DWORD RatePercent   : 28;
    };
} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
typedef struct _QUOTA_LIMITS_EX {
    SIZE_T PagedPoolLimit;
    SIZE_T NonPagedPoolLimit;
    SIZE_T MinimumWorkingSetSize;
    SIZE_T MaximumWorkingSetSize;
    SIZE_T PagefileLimit;
    LARGE_INTEGER TimeLimit;
    SIZE_T WorkingSetLimit;
    SIZE_T Reserved2;
    SIZE_T Reserved3;
    SIZE_T Reserved4;
    DWORD  Flags;
    RATE_QUOTA_LIMIT CpuRateLimit;
} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
typedef struct _IO_COUNTERS {
    ULONGLONG  ReadOperationCount;
    ULONGLONG  WriteOperationCount;
    ULONGLONG  OtherOperationCount;
    ULONGLONG ReadTransferCount;
    ULONGLONG WriteTransferCount;
    ULONGLONG OtherTransferCount;
} IO_COUNTERS;
typedef IO_COUNTERS *PIO_COUNTERS;
typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
    LARGE_INTEGER TotalUserTime;
    LARGE_INTEGER TotalKernelTime;
    LARGE_INTEGER ThisPeriodTotalUserTime;
    LARGE_INTEGER ThisPeriodTotalKernelTime;
    DWORD TotalPageFaultCount;
    DWORD TotalProcesses;
    DWORD ActiveProcesses;
    DWORD TotalTerminatedProcesses;
} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
    LARGE_INTEGER PerProcessUserTimeLimit;
    LARGE_INTEGER PerJobUserTimeLimit;
    DWORD LimitFlags;
    SIZE_T MinimumWorkingSetSize;
    SIZE_T MaximumWorkingSetSize;
    DWORD ActiveProcessLimit;
    ULONG_PTR Affinity;
    DWORD PriorityClass;
    DWORD SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;
typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
    JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
    IO_COUNTERS IoInfo;
    SIZE_T ProcessMemoryLimit;
    SIZE_T JobMemoryLimit;
    SIZE_T PeakProcessMemoryUsed;
    SIZE_T PeakJobMemoryUsed;
} JOBOBJECT_EXTENDED_LIMIT_INFORMATION, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
    DWORD NumberOfAssignedProcesses;
    DWORD NumberOfProcessIdsInList;
    ULONG_PTR ProcessIdList[1];
} JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
    DWORD UIRestrictionsClass;
} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;
typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
    DWORD SecurityLimitFlags ;
    HANDLE JobToken ;
    PTOKEN_GROUPS SidsToDisable ;
    PTOKEN_PRIVILEGES PrivilegesToDelete ;
    PTOKEN_GROUPS RestrictedSids ;
} JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION ;
typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
    DWORD EndOfJobTimeAction;
} JOBOBJECT_END_OF_JOB_TIME_INFORMATION, *PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
    PVOID CompletionKey;
    HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
    JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
    IO_COUNTERS IoInfo;
} JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
typedef struct _JOBOBJECT_JOBSET_INFORMATION {
    DWORD MemberLevel;
} JOBOBJECT_JOBSET_INFORMATION, *PJOBOBJECT_JOBSET_INFORMATION;
typedef enum _JOBOBJECTINFOCLASS {
    JobObjectBasicAccountingInformation = 1,
    JobObjectBasicLimitInformation,
    JobObjectBasicProcessIdList,
    JobObjectBasicUIRestrictions,
    JobObjectSecurityLimitInformation,
    JobObjectEndOfJobTimeInformation,
    JobObjectAssociateCompletionPortInformation,
    JobObjectBasicAndIoAccountingInformation,
    JobObjectExtendedLimitInformation,
    JobObjectJobSetInformation,
    MaxJobObjectInfoClass
    } JOBOBJECTINFOCLASS;
typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
    RelationProcessorCore,
    RelationNumaNode,
    RelationCache,
    RelationProcessorPackage
} LOGICAL_PROCESSOR_RELATIONSHIP;
typedef enum _PROCESSOR_CACHE_TYPE {
    CacheUnified,
    CacheInstruction,
    CacheData,
    CacheTrace
} PROCESSOR_CACHE_TYPE;
typedef struct _CACHE_DESCRIPTOR {
    BYTE   Level;
    BYTE   Associativity;
    WORD   LineSize;
    DWORD  Size;
    PROCESSOR_CACHE_TYPE Type;
} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
    ULONG_PTR   ProcessorMask;
    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
    union {
        struct {
            BYTE  Flags;
        } ProcessorCore;
        struct {
            DWORD NodeNumber;
        } NumaNode;
        CACHE_DESCRIPTOR Cache;
        ULONGLONG  Reserved[2];
    };
} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
typedef struct _MEMORY_BASIC_INFORMATION {
    PVOID BaseAddress;
    PVOID AllocationBase;
    DWORD AllocationProtect;
    SIZE_T RegionSize;
    DWORD State;
    DWORD Protect;
    DWORD Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
typedef struct _MEMORY_BASIC_INFORMATION32 {
    DWORD BaseAddress;
    DWORD AllocationBase;
    DWORD AllocationProtect;
    DWORD RegionSize;
    DWORD State;
    DWORD Protect;
    DWORD Type;
} MEMORY_BASIC_INFORMATION32, *PMEMORY_BASIC_INFORMATION32;
typedef struct __declspec(align(16)) _MEMORY_BASIC_INFORMATION64 {
    ULONGLONG BaseAddress;
    ULONGLONG AllocationBase;
    DWORD     AllocationProtect;
    DWORD     __alignment1;
    ULONGLONG RegionSize;
    DWORD     State;
    DWORD     Protect;
    DWORD     Type;
    DWORD     __alignment2;
} MEMORY_BASIC_INFORMATION64, *PMEMORY_BASIC_INFORMATION64;
typedef struct _FILE_NOTIFY_INFORMATION {
    DWORD NextEntryOffset;
    DWORD Action;
    DWORD FileNameLength;
    WCHAR FileName[1];
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
typedef union _FILE_SEGMENT_ELEMENT {
    PVOID64 Buffer;
    ULONGLONG Alignment;
}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
typedef struct _REPARSE_GUID_DATA_BUFFER {
    DWORD  ReparseTag;
    WORD   ReparseDataLength;
    WORD   Reserved;
    GUID   ReparseGuid;
    struct {
        BYTE   DataBuffer[1];
    } GenericReparseBuffer;
} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
extern const GUID  GUID_MAX_POWER_SAVINGS;
extern const GUID  GUID_MIN_POWER_SAVINGS;
extern const GUID  GUID_TYPICAL_POWER_SAVINGS;
extern const GUID  NO_SUBGROUP_GUID;
extern const GUID  ALL_POWERSCHEMES_GUID;
extern const GUID  GUID_POWERSCHEME_PERSONALITY;
extern const GUID  GUID_ACTIVE_POWERSCHEME;
extern const GUID  GUID_VIDEO_SUBGROUP;
extern const GUID  GUID_VIDEO_POWERDOWN_TIMEOUT;
extern const GUID  GUID_VIDEO_ADAPTIVE_POWERDOWN;
extern const GUID  GUID_MONITOR_POWER_ON;
extern const GUID  GUID_DISK_SUBGROUP;
extern const GUID  GUID_DISK_POWERDOWN_TIMEOUT;
extern const GUID  GUID_DISK_ADAPTIVE_POWERDOWN;
extern const GUID  GUID_SLEEP_SUBGROUP;
extern const GUID  GUID_SLEEP_IDLE_THRESHOLD;
extern const GUID  GUID_STANDBY_TIMEOUT;
extern const GUID  GUID_HIBERNATE_TIMEOUT;
extern const GUID  GUID_HIBERNATE_FASTS4_POLICY;
extern const GUID  GUID_CRITICAL_POWER_TRANSITION;
extern const GUID  GUID_SYSTEM_AWAYMODE;
extern const GUID  GUID_ALLOW_AWAYMODE;
extern const GUID  GUID_ALLOW_STANDBY_STATES;
extern const GUID  GUID_ALLOW_RTC_WAKE;
extern const GUID  GUID_SYSTEM_BUTTON_SUBGROUP;
extern const GUID  GUID_POWERBUTTON_ACTION;
extern const GUID  GUID_POWERBUTTON_ACTION_FLAGS;
extern const GUID  GUID_SLEEPBUTTON_ACTION;
extern const GUID  GUID_SLEEPBUTTON_ACTION_FLAGS;
extern const GUID  GUID_USERINTERFACEBUTTON_ACTION;
extern const GUID  GUID_LIDCLOSE_ACTION;
extern const GUID  GUID_LIDCLOSE_ACTION_FLAGS;
extern const GUID  GUID_LIDOPEN_POWERSTATE;
extern const GUID  GUID_BATTERY_SUBGROUP;
extern const GUID  GUID_BATTERY_DISCHARGE_ACTION_0;
extern const GUID  GUID_BATTERY_DISCHARGE_LEVEL_0;
extern const GUID  GUID_BATTERY_DISCHARGE_FLAGS_0;
extern const GUID  GUID_BATTERY_DISCHARGE_ACTION_1;
extern const GUID  GUID_BATTERY_DISCHARGE_LEVEL_1;
extern const GUID  GUID_BATTERY_DISCHARGE_FLAGS_1;
extern const GUID  GUID_BATTERY_DISCHARGE_ACTION_2;
extern const GUID  GUID_BATTERY_DISCHARGE_LEVEL_2;
extern const GUID  GUID_BATTERY_DISCHARGE_FLAGS_2;
extern const GUID  GUID_BATTERY_DISCHARGE_ACTION_3;
extern const GUID  GUID_BATTERY_DISCHARGE_LEVEL_3;
extern const GUID  GUID_BATTERY_DISCHARGE_FLAGS_3;
extern const GUID  GUID_PROCESSOR_SETTINGS_SUBGROUP;
extern const GUID  GUID_PROCESSOR_THROTTLE_POLICY;
extern const GUID  GUID_PROCESSOR_THROTTLE_MAXIMUM;
extern const GUID  GUID_PROCESSOR_THROTTLE_MINIMUM;
extern const GUID  GUID_PROCESSOR_IDLESTATE_POLICY;
extern const GUID  GUID_PROCESSOR_PERFSTATE_POLICY;
extern const GUID  GUID_SYSTEM_COOLING_POLICY;
extern const GUID  GUID_LOCK_CONSOLE_ON_WAKE;
extern const GUID  GUID_ACDC_POWER_SOURCE;
extern const GUID  GUID_LIDSWITCH_STATE_CHANGE;
extern const GUID  GUID_BATTERY_PERCENTAGE_REMAINING;
extern const GUID  GUID_IDLE_BACKGROUND_TASK;
extern const GUID  GUID_BACKGROUND_TASK_NOTIFICATION;
extern const GUID  GUID_APPLAUNCH_BUTTON;
extern const GUID  GUID_PCIEXPRESS_SETTINGS_SUBGROUP;
extern const GUID  GUID_PCIEXPRESS_ASPM_POLICY;
typedef enum _SYSTEM_POWER_STATE {
    PowerSystemUnspecified = 0,
    PowerSystemWorking     = 1,
    PowerSystemSleeping1   = 2,
    PowerSystemSleeping2   = 3,
    PowerSystemSleeping3   = 4,
    PowerSystemHibernate   = 5,
    PowerSystemShutdown    = 6,
    PowerSystemMaximum     = 7
} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
typedef enum {
    PowerActionNone = 0,
    PowerActionReserved,
    PowerActionSleep,
    PowerActionHibernate,
    PowerActionShutdown,
    PowerActionShutdownReset,
    PowerActionShutdownOff,
    PowerActionWarmEject
} POWER_ACTION, *PPOWER_ACTION;
typedef enum _DEVICE_POWER_STATE {
    PowerDeviceUnspecified = 0,
    PowerDeviceD0,
    PowerDeviceD1,
    PowerDeviceD2,
    PowerDeviceD3,
    PowerDeviceMaximum
} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
typedef DWORD EXECUTION_STATE;
typedef enum {
    LT_DONT_CARE,
    LT_LOWEST_LATENCY
} LATENCY_TIME;
typedef struct CM_Power_Data_s {
    DWORD               PD_Size;
    DEVICE_POWER_STATE  PD_MostRecentPowerState;
    DWORD               PD_Capabilities;
    DWORD               PD_D1Latency;
    DWORD               PD_D2Latency;
    DWORD               PD_D3Latency;
    DEVICE_POWER_STATE  PD_PowerStateMapping[7];
    SYSTEM_POWER_STATE  PD_DeepestSystemWake;
} CM_POWER_DATA, *PCM_POWER_DATA;
typedef enum {
    SystemPowerPolicyAc,
    SystemPowerPolicyDc,
    VerifySystemPolicyAc,
    VerifySystemPolicyDc,
    SystemPowerCapabilities,
    SystemBatteryState,
    SystemPowerStateHandler,
    ProcessorStateHandler,
    SystemPowerPolicyCurrent,
    AdministratorPowerPolicy,
    SystemReserveHiberFile,
    ProcessorInformation,
    SystemPowerInformation,
    ProcessorStateHandler2,
    LastWakeTime,
    LastSleepTime,
    SystemExecutionState,
    SystemPowerStateNotifyHandler,
    ProcessorPowerPolicyAc,
    ProcessorPowerPolicyDc,
    VerifyProcessorPowerPolicyAc,
    VerifyProcessorPowerPolicyDc,
    ProcessorPowerPolicyCurrent,
    SystemPowerStateLogging,
    SystemPowerLoggingEntry,
    SetPowerSettingValue,
    NotifyUserPowerSetting,
    GetPowerTransitionVetoes,
    SetPowerTransitionVeto,
    SystemVideoState,
    TraceApplicationPowerMessage,
    TraceApplicationPowerMessageEnd,
    ProcessorPerfStates,
    ProcessorIdleStates,
    ProcessorThrottleStates,
    SystemWakeSource,
    SystemHiberFileInformation,
    TraceServicePowerMessage,
    ProcessorLoad,
    PowerShutdownNotification
} POWER_INFORMATION_LEVEL;
typedef struct _PO_TRANSITION_VETO_REASON {
    DWORD ResourceId;
    DWORD ModuleNameOffset;
} PO_TRANSITION_VETO_REASON, *PPO_TRANSITION_VETO_REASON;
typedef struct _PO_TRANSITION_VETO_WINDOW {
    HANDLE Handle;
} PO_TRANSITION_VETO_WINDOW, *PPO_TRANSITION_VETO_WINDOW;
typedef struct _PO_TRANSITION_VETO_SERVICE {
    DWORD ServiceNameOffset;
} PO_TRANSITION_VETO_SERVICE, *PPO_TRANSITION_VETO_SERVICE;
typedef struct _PO_TRANSITION_VETO {
    DWORD Type;
    PO_TRANSITION_VETO_REASON Reason;
    DWORD ProcessId;
    union {
        PO_TRANSITION_VETO_WINDOW Window;
        PO_TRANSITION_VETO_SERVICE Service;
    };
} PO_TRANSITION_VETO, *PPO_TRANSITION_VETO;
typedef struct _PO_TRANSITION_VETOES {
    DWORD Count;
    PO_TRANSITION_VETO Vetoes[1];
} PO_TRANSITION_VETOES, *PPO_TRANSITION_VETOES;
typedef enum {
    PoAc,
    PoDc,
    PoHot,
    PoConditionMaximum
} SYSTEM_POWER_CONDITION;
typedef struct {
    DWORD       Version;
    GUID        Guid;
    SYSTEM_POWER_CONDITION PowerCondition;
    DWORD       DataLength;
    BYTE    Data[1];
} SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
typedef struct {
    GUID Guid;
} NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
    LARGE_INTEGER       ActivationTime;
    DWORD               Flags;
    DWORD               ButtonInstanceID;
} APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
typedef enum {
    PlatformRoleUnspecified = 0,
    PlatformRoleDesktop,
    PlatformRoleMobile,
    PlatformRoleWorkstation,
    PlatformRoleEnterpriseServer,
    PlatformRoleSOHOServer,
    PlatformRoleAppliancePC,
    PlatformRolePerformanceServer,
    PlatformRoleMaximum
} POWER_PLATFORM_ROLE;
typedef enum {
    DeviceWakeSourceType,
    FixedWakeSourceType
} PO_WAKE_SOURCE_TYPE, *PPO_WAKE_SOURCE_TYPE;
typedef enum {
    FixedWakeSourcePowerButton,
    FixedWakeSourceSleepButton,
    FixedWakeSourceRtc
} PO_FIXED_WAKE_SOURCE_TYPE, *PPO_FIXED_WAKE_SOURCE_TYPE;
typedef struct _PO_WAKE_SOURCE_HEADER {
    PO_WAKE_SOURCE_TYPE Type;
    DWORD Size;
} PO_WAKE_SOURCE_HEADER, *PPO_WAKE_SOURCE_HEADER;
typedef struct _PO_WAKE_SOURCE_DEVICE {
    PO_WAKE_SOURCE_HEADER Header;
    WCHAR InstancePath[1];
} PO_WAKE_SOURCE_DEVICE, *PPO_WAKE_SOURCE_DEVICE;
typedef struct _PO_WAKE_SOURCE_FIXED {
    PO_WAKE_SOURCE_HEADER Header;
    PO_FIXED_WAKE_SOURCE_TYPE FixedWakeSourceType;
} PO_WAKE_SOURCE_FIXED, *PPO_WAKE_SOURCE_FIXED;
typedef struct _PO_WAKE_SOURCE_INFO {
    DWORD Count;
    DWORD Offsets[1];
} PO_WAKE_SOURCE_INFO, *PPO_WAKE_SOURCE_INFO;
typedef struct _PO_WAKE_SOURCE_HISTORY {
    DWORD Count;
    DWORD Offsets[1];
} PO_WAKE_SOURCE_HISTORY, *PPO_WAKE_SOURCE_HISTORY;
typedef struct {
    DWORD       Granularity;
    DWORD       Capacity;
} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
typedef struct {
    BOOLEAN Enabled;
    BYTE  PercentBusy[32];
} PPM_SIMULATED_PROCESSOR_LOAD, *PPPM_SIMULATED_PROCESSOR_LOAD;
typedef struct {
    DWORD   Frequency;
    DWORD   Flags;
    DWORD   PercentFrequency;
} PPM_WMI_LEGACY_PERFSTATE, *PPPM_WMI_LEGACY_PERFSTATE;
typedef struct {
    DWORD Latency;
    DWORD Power;
    DWORD TimeCheck;
    BYTE  PromotePercent;
    BYTE  DemotePercent;
    BYTE  StateType;
    BYTE  Reserved;
    DWORD StateFlags;
    DWORD Context;
    DWORD IdleHandler;
    DWORD Reserved1;
} PPM_WMI_IDLE_STATE, *PPPM_WMI_IDLE_STATE;
typedef struct {
    DWORD Type;
    DWORD Count;
    DWORD TargetState;
    DWORD OldState;
    DWORD64 TargetProcessors;
    PPM_WMI_IDLE_STATE State[1];
} PPM_WMI_IDLE_STATES, *PPPM_WMI_IDLE_STATES;
typedef struct {
    DWORD Frequency;
    DWORD Power;
    BYTE  PercentFrequency;
    BYTE  IncreaseLevel;
    BYTE  DecreaseLevel;
    BYTE  Type;
    DWORD IncreaseTime;
    DWORD DecreaseTime;
    DWORD64 Control;
    DWORD64 Status;
    DWORD HitCount;
    DWORD Reserved1;
    DWORD64 Reserved2;
    DWORD64 Reserved3;
} PPM_WMI_PERF_STATE, *PPPM_WMI_PERF_STATE;
typedef struct {
    DWORD Count;
    DWORD MaxFrequency;
    DWORD CurrentState;
    DWORD MaxPerfState;
    DWORD MinPerfState;
    DWORD LowestPerfState;
    DWORD ThermalConstraint;
    BYTE  BusyAdjThreshold;
    BYTE  PolicyType;
    BYTE  Type;
    BYTE  Reserved;
    DWORD TimerInterval;
    DWORD64 TargetProcessors;
    DWORD PStateHandler;
    DWORD PStateContext;
    DWORD TStateHandler;
    DWORD TStateContext;
    DWORD FeedbackHandler;
    DWORD Reserved1;
    DWORD64 Reserved2;
    PPM_WMI_PERF_STATE State[1];
} PPM_WMI_PERF_STATES, *PPPM_WMI_PERF_STATES;
typedef struct {
    DWORD IdleTransitions;
    DWORD FailedTransitions;
    DWORD InvalidBucketIndex;
    DWORD64 TotalTime;
    DWORD IdleTimeBuckets[6];
} PPM_IDLE_STATE_ACCOUNTING, *PPPM_IDLE_STATE_ACCOUNTING;
typedef struct {
    DWORD StateCount;
    DWORD TotalTransitions;
    DWORD ResetCount;
    DWORD64 StartTime;
    PPM_IDLE_STATE_ACCOUNTING State[1];
} PPM_IDLE_ACCOUNTING, *PPPM_IDLE_ACCOUNTING;
extern const GUID  PPM_PERFSTATE_CHANGE_GUID;
extern const GUID  PPM_PERFSTATE_DOMAIN_CHANGE_GUID;
extern const GUID  PPM_IDLESTATE_CHANGE_GUID;
extern const GUID  PPM_PERFSTATES_DATA_GUID;
extern const GUID  PPM_IDLESTATES_DATA_GUID;
extern const GUID  PPM_IDLE_ACCOUNTING_GUID;
extern const GUID  PPM_THERMALCONSTRAINT_GUID;
extern const GUID  PPM_PERFMON_PERFSTATE_GUID;
extern const GUID  PPM_THERMAL_POLICY_CHANGE_GUID;
typedef struct {
    DWORD State;
    DWORD Status;
    DWORD Latency;
    DWORD Speed;
    DWORD Processor;
} PPM_PERFSTATE_EVENT, *PPPM_PERFSTATE_EVENT;
typedef struct {
    DWORD State;
    DWORD Latency;
    DWORD Speed;
    DWORD64 Processors;
} PPM_PERFSTATE_DOMAIN_EVENT, *PPPM_PERFSTATE_DOMAIN_EVENT;
typedef struct {
    DWORD NewState;
    DWORD OldState;
    DWORD64 Processors;
} PPM_IDLESTATE_EVENT, *PPPM_IDLESTATE_EVENT;
typedef struct {
    DWORD ThermalConstraint;
    DWORD64 Processors;
} PPM_THERMALCHANGE_EVENT, *PPPM_THERMALCHANGE_EVENT;
typedef struct {
    BYTE  Mode;
    DWORD64 Processors;
} PPM_THERMAL_POLICY_EVENT, *PPPM_THERMAL_POLICY_EVENT;
typedef struct {
    POWER_ACTION    Action;
    DWORD           Flags;
    DWORD           EventCode;
} POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
typedef struct {
    BOOLEAN                 Enable;
    BYTE                    Spare[3];
    DWORD                   BatteryLevel;
    POWER_ACTION_POLICY     PowerPolicy;
    SYSTEM_POWER_STATE      MinSystemState;
} SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
typedef struct _SYSTEM_POWER_POLICY {
    DWORD                   Revision;
    POWER_ACTION_POLICY     PowerButton;
    POWER_ACTION_POLICY     SleepButton;
    POWER_ACTION_POLICY     LidClose;
    SYSTEM_POWER_STATE      LidOpenWake;
    DWORD                   Reserved;
    POWER_ACTION_POLICY     Idle;
    DWORD                   IdleTimeout;
    BYTE                    IdleSensitivity;
    BYTE                    DynamicThrottle;
    BYTE                    Spare2[2];
    SYSTEM_POWER_STATE      MinSleep;
    SYSTEM_POWER_STATE      MaxSleep;
    SYSTEM_POWER_STATE      ReducedLatencySleep;
    DWORD                   WinLogonFlags;
    DWORD                   Spare3;
    DWORD                   DozeS4Timeout;
    DWORD                   BroadcastCapacityResolution;
    SYSTEM_POWER_LEVEL      DischargePolicy[4];
    DWORD                   VideoTimeout;
    BOOLEAN                 VideoDimDisplay;
    DWORD                   VideoReserved[3];
    DWORD                   SpindownTimeout;
    BOOLEAN                 OptimizeForPower;
    BYTE                    FanThrottleTolerance;
    BYTE                    ForcedThrottle;
    BYTE                    MinThrottle;
    POWER_ACTION_POLICY     OverThrottled;
} SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
typedef struct {
    DWORD TimeCheck;
    BYTE  DemotePercent;
    BYTE  PromotePercent;
    BYTE  Spare[2];
} PROCESSOR_IDLESTATE_INFO, *PPROCESSOR_IDLESTATE_INFO;
typedef struct {
    WORD   Revision;
    union {
        WORD   AsWORD  ;
        struct {
            WORD   AllowScaling : 1;
            WORD   Disabled : 1;
            WORD   Reserved : 14;
        };
    } Flags;
    DWORD PolicyCount;
    PROCESSOR_IDLESTATE_INFO Policy[0x3];
} PROCESSOR_IDLESTATE_POLICY, *PPROCESSOR_IDLESTATE_POLICY;
typedef struct _PROCESSOR_POWER_POLICY_INFO {
    DWORD                   TimeCheck;
    DWORD                   DemoteLimit;
    DWORD                   PromoteLimit;
    BYTE                    DemotePercent;
    BYTE                    PromotePercent;
    BYTE                    Spare[2];
    DWORD                   AllowDemotion:1;
    DWORD                   AllowPromotion:1;
    DWORD                   Reserved:30;
} PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
typedef struct _PROCESSOR_POWER_POLICY {
    DWORD                       Revision;
    BYTE                        DynamicThrottle;
    BYTE                        Spare[3];
    DWORD                       DisableCStates:1;
    DWORD                       Reserved:31;
    DWORD                       PolicyCount;
    PROCESSOR_POWER_POLICY_INFO Policy[3];
} PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
typedef struct {
    DWORD Revision;
    BYTE  MaxThrottle;
    BYTE  MinThrottle;
    BYTE  BusyAdjThreshold;
    union {
        BYTE  Spare;
        union {
            BYTE  AsBYTE ;
            struct {
                BYTE  NoDomainAccounting : 1;
                BYTE  IncreasePolicy: 2;
                BYTE  DecreasePolicy: 2;
                BYTE  Reserved : 3;
            };
        } Flags;
    };
    DWORD TimeCheck;
    DWORD IncreaseTime;
    DWORD DecreaseTime;
    DWORD IncreasePercent;
    DWORD DecreasePercent;
} PROCESSOR_PERFSTATE_POLICY, *PPROCESSOR_PERFSTATE_POLICY;
typedef struct _ADMINISTRATOR_POWER_POLICY {
    SYSTEM_POWER_STATE      MinSleep;
    SYSTEM_POWER_STATE      MaxSleep;
    DWORD                   MinVideoTimeout;
    DWORD                   MaxVideoTimeout;
    DWORD                   MinSpindownTimeout;
    DWORD                   MaxSpindownTimeout;
} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
typedef struct {
    BOOLEAN             PowerButtonPresent;
    BOOLEAN             SleepButtonPresent;
    BOOLEAN             LidPresent;
    BOOLEAN             SystemS1;
    BOOLEAN             SystemS2;
    BOOLEAN             SystemS3;
    BOOLEAN             SystemS4;
    BOOLEAN             SystemS5;
    BOOLEAN             HiberFilePresent;
    BOOLEAN             FullWake;
    BOOLEAN             VideoDimPresent;
    BOOLEAN             ApmPresent;
    BOOLEAN             UpsPresent;
    BOOLEAN             ThermalControl;
    BOOLEAN             ProcessorThrottle;
    BYTE                ProcessorMinThrottle;
    BYTE                ProcessorMaxThrottle;
    BOOLEAN             FastSystemS4;
    BYTE                spare2[3];
    BOOLEAN             DiskSpinDown;
    BYTE                spare3[8];
    BOOLEAN             SystemBatteriesPresent;
    BOOLEAN             BatteriesAreShortTerm;
    BATTERY_REPORTING_SCALE BatteryScale[3];
    SYSTEM_POWER_STATE  AcOnLineWake;
    SYSTEM_POWER_STATE  SoftLidWake;
    SYSTEM_POWER_STATE  RtcWake;
    SYSTEM_POWER_STATE  MinDeviceWakeState;
    SYSTEM_POWER_STATE  DefaultLowLatencyWake;
} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
typedef struct {
    BOOLEAN             AcOnLine;
    BOOLEAN             BatteryPresent;
    BOOLEAN             Charging;
    BOOLEAN             Discharging;
    BOOLEAN             Spare1[4];
    DWORD               MaxCapacity;
    DWORD               RemainingCapacity;
    DWORD               Rate;
    DWORD               EstimatedTime;
    DWORD               DefaultAlert1;
    DWORD               DefaultAlert2;
} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
typedef struct _IMAGE_DOS_HEADER {
    WORD   e_magic;
    WORD   e_cblp;
    WORD   e_cp;
    WORD   e_crlc;
    WORD   e_cparhdr;
    WORD   e_minalloc;
    WORD   e_maxalloc;
    WORD   e_ss;
    WORD   e_sp;
    WORD   e_csum;
    WORD   e_ip;
    WORD   e_cs;
    WORD   e_lfarlc;
    WORD   e_ovno;
    WORD   e_res[4];
    WORD   e_oemid;
    WORD   e_oeminfo;
    WORD   e_res2[10];
    LONG   e_lfanew;
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
typedef struct _IMAGE_OS2_HEADER {
    WORD   ne_magic;
    CHAR   ne_ver;
    CHAR   ne_rev;
    WORD   ne_enttab;
    WORD   ne_cbenttab;
    LONG   ne_crc;
    WORD   ne_flags;
    WORD   ne_autodata;
    WORD   ne_heap;
    WORD   ne_stack;
    LONG   ne_csip;
    LONG   ne_sssp;
    WORD   ne_cseg;
    WORD   ne_cmod;
    WORD   ne_cbnrestab;
    WORD   ne_segtab;
    WORD   ne_rsrctab;
    WORD   ne_restab;
    WORD   ne_modtab;
    WORD   ne_imptab;
    LONG   ne_nrestab;
    WORD   ne_cmovent;
    WORD   ne_align;
    WORD   ne_cres;
    BYTE   ne_exetyp;
    BYTE   ne_flagsothers;
    WORD   ne_pretthunks;
    WORD   ne_psegrefbytes;
    WORD   ne_swaparea;
    WORD   ne_expver;
  } IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
typedef struct _IMAGE_VXD_HEADER {
    WORD   e32_magic;
    BYTE   e32_border;
    BYTE   e32_worder;
    DWORD  e32_level;
    WORD   e32_cpu;
    WORD   e32_os;
    DWORD  e32_ver;
    DWORD  e32_mflags;
    DWORD  e32_mpages;
    DWORD  e32_startobj;
    DWORD  e32_eip;
    DWORD  e32_stackobj;
    DWORD  e32_esp;
    DWORD  e32_pagesize;
    DWORD  e32_lastpagesize;
    DWORD  e32_fixupsize;
    DWORD  e32_fixupsum;
    DWORD  e32_ldrsize;
    DWORD  e32_ldrsum;
    DWORD  e32_objtab;
    DWORD  e32_objcnt;
    DWORD  e32_objmap;
    DWORD  e32_itermap;
    DWORD  e32_rsrctab;
    DWORD  e32_rsrccnt;
    DWORD  e32_restab;
    DWORD  e32_enttab;
    DWORD  e32_dirtab;
    DWORD  e32_dircnt;
    DWORD  e32_fpagetab;
    DWORD  e32_frectab;
    DWORD  e32_impmod;
    DWORD  e32_impmodcnt;
    DWORD  e32_impproc;
    DWORD  e32_pagesum;
    DWORD  e32_datapage;
    DWORD  e32_preload;
    DWORD  e32_nrestab;
    DWORD  e32_cbnrestab;
    DWORD  e32_nressum;
    DWORD  e32_autodata;
    DWORD  e32_debuginfo;
    DWORD  e32_debuglen;
    DWORD  e32_instpreload;
    DWORD  e32_instdemand;
    DWORD  e32_heapsize;
    BYTE   e32_res3[12];
    DWORD  e32_winresoff;
    DWORD  e32_winreslen;
    WORD   e32_devid;
    WORD   e32_ddkver;
  } IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
typedef struct _IMAGE_OPTIONAL_HEADER {
    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;
    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[16];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
    WORD   Magic;
    BYTE   MajorLinkerVersion;
    BYTE   MinorLinkerVersion;
    DWORD  SizeOfCode;
    DWORD  SizeOfInitializedData;
    DWORD  SizeOfUninitializedData;
    DWORD  AddressOfEntryPoint;
    DWORD  BaseOfCode;
    DWORD  BaseOfData;
    DWORD  BaseOfBss;
    DWORD  GprMask;
    DWORD  CprMask[4];
    DWORD  GpValue;
} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER;
typedef struct _IMAGE_OPTIONAL_HEADER64 {
    WORD        Magic;
    BYTE        MajorLinkerVersion;
    BYTE        MinorLinkerVersion;
    DWORD       SizeOfCode;
    DWORD       SizeOfInitializedData;
    DWORD       SizeOfUninitializedData;
    DWORD       AddressOfEntryPoint;
    DWORD       BaseOfCode;
    ULONGLONG   ImageBase;
    DWORD       SectionAlignment;
    DWORD       FileAlignment;
    WORD        MajorOperatingSystemVersion;
    WORD        MinorOperatingSystemVersion;
    WORD        MajorImageVersion;
    WORD        MinorImageVersion;
    WORD        MajorSubsystemVersion;
    WORD        MinorSubsystemVersion;
    DWORD       Win32VersionValue;
    DWORD       SizeOfImage;
    DWORD       SizeOfHeaders;
    DWORD       CheckSum;
    WORD        Subsystem;
    WORD        DllCharacteristics;
    ULONGLONG   SizeOfStackReserve;
    ULONGLONG   SizeOfStackCommit;
    ULONGLONG   SizeOfHeapReserve;
    ULONGLONG   SizeOfHeapCommit;
    DWORD       LoaderFlags;
    DWORD       NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[16];
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
typedef IMAGE_OPTIONAL_HEADER32             IMAGE_OPTIONAL_HEADER;
typedef PIMAGE_OPTIONAL_HEADER32            PIMAGE_OPTIONAL_HEADER;
typedef struct _IMAGE_NT_HEADERS64 {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER64 OptionalHeader;
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
typedef struct _IMAGE_ROM_HEADERS {
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
} IMAGE_ROM_HEADERS, *PIMAGE_ROM_HEADERS;
typedef IMAGE_NT_HEADERS32                  IMAGE_NT_HEADERS;
typedef PIMAGE_NT_HEADERS32                 PIMAGE_NT_HEADERS;
typedef struct ANON_OBJECT_HEADER {
    WORD    Sig1;
    WORD    Sig2;
    WORD    Version;
    WORD    Machine;
    DWORD   TimeDateStamp;
    CLSID   ClassID;
    DWORD   SizeOfData;
} ANON_OBJECT_HEADER;
typedef struct ANON_OBJECT_HEADER_V2 {
    WORD    Sig1;
    WORD    Sig2;
    WORD    Version;
    WORD    Machine;
    DWORD   TimeDateStamp;
    CLSID   ClassID;
    DWORD   SizeOfData;
    DWORD   Flags;
    DWORD   MetaDataSize;
    DWORD   MetaDataOffset;
} ANON_OBJECT_HEADER_V2;
typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[8];
    union {
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;
    DWORD   VirtualAddress;
    DWORD   SizeOfRawData;
    DWORD   PointerToRawData;
    DWORD   PointerToRelocations;
    DWORD   PointerToLinenumbers;
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SYMBOL {
    union {
        BYTE    ShortName[8];
        struct {
            DWORD   Short;
            DWORD   Long;
        } Name;
        DWORD   LongName[2];
    } N;
    DWORD   Value;
    SHORT   SectionNumber;
    WORD    Type;
    BYTE    StorageClass;
    BYTE    NumberOfAuxSymbols;
} IMAGE_SYMBOL;
typedef IMAGE_SYMBOL  *PIMAGE_SYMBOL;
typedef union _IMAGE_AUX_SYMBOL {
    struct {
        DWORD    TagIndex;
        union {
            struct {
                WORD    Linenumber;
                WORD    Size;
            } LnSz;
           DWORD    TotalSize;
        } Misc;
        union {
            struct {
                DWORD    PointerToLinenumber;
                DWORD    PointerToNextFunction;
            } Function;
            struct {
                WORD     Dimension[4];
            } Array;
        } FcnAry;
        WORD    TvIndex;
    } Sym;
    struct {
        BYTE    Name[18];
    } File;
    struct {
        DWORD   Length;
        WORD    NumberOfRelocations;
        WORD    NumberOfLinenumbers;
        DWORD   CheckSum;
        SHORT   Number;
        BYTE    Selection;
    } Section;
} IMAGE_AUX_SYMBOL;
typedef IMAGE_AUX_SYMBOL  *PIMAGE_AUX_SYMBOL;
typedef enum IMAGE_AUX_SYMBOL_TYPE {
    IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1,
} IMAGE_AUX_SYMBOL_TYPE;
typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
    BYTE  bAuxType;
    BYTE  bReserved;
    DWORD SymbolTableIndex;
    BYTE  rgbReserved[12];
} IMAGE_AUX_SYMBOL_TOKEN_DEF;
typedef IMAGE_AUX_SYMBOL_TOKEN_DEF  *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
typedef struct _IMAGE_RELOCATION {
    union {
        DWORD   VirtualAddress;
        DWORD   RelocCount;
    };
    DWORD   SymbolTableIndex;
    WORD    Type;
} IMAGE_RELOCATION;
typedef IMAGE_RELOCATION  *PIMAGE_RELOCATION;
typedef struct _IMAGE_LINENUMBER {
    union {
        DWORD   SymbolTableIndex;
        DWORD   VirtualAddress;
    } Type;
    WORD    Linenumber;
} IMAGE_LINENUMBER;
typedef IMAGE_LINENUMBER  *PIMAGE_LINENUMBER;
typedef struct _IMAGE_BASE_RELOCATION {
    DWORD   VirtualAddress;
    DWORD   SizeOfBlock;
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION  * PIMAGE_BASE_RELOCATION;
typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
    BYTE     Name[16];
    BYTE     Date[12];
    BYTE     UserID[6];
    BYTE     GroupID[6];
    BYTE     Mode[8];
    BYTE     Size[10];
    BYTE     EndHeader[2];
} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Name;
    DWORD   Base;
    DWORD   NumberOfFunctions;
    DWORD   NumberOfNames;
    DWORD   AddressOfFunctions;
    DWORD   AddressOfNames;
    DWORD   AddressOfNameOrdinals;
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;
    BYTE    Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
typedef struct _IMAGE_THUNK_DATA64 {
    union {
        ULONGLONG ForwarderString;
        ULONGLONG Function;
        ULONGLONG Ordinal;
        ULONGLONG AddressOfData;
    } u1;
} IMAGE_THUNK_DATA64;
typedef IMAGE_THUNK_DATA64 * PIMAGE_THUNK_DATA64;
typedef struct _IMAGE_THUNK_DATA32 {
    union {
        DWORD ForwarderString;
        DWORD Function;
        DWORD Ordinal;
        DWORD AddressOfData;
    } u1;
} IMAGE_THUNK_DATA32;
typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;
typedef void
( *PIMAGE_TLS_CALLBACK) (
    PVOID DllHandle,
    DWORD Reason,
    PVOID Reserved
    );
typedef struct _IMAGE_TLS_DIRECTORY64 {
    ULONGLONG   StartAddressOfRawData;
    ULONGLONG   EndAddressOfRawData;
    ULONGLONG   AddressOfIndex;
    ULONGLONG   AddressOfCallBacks;
    DWORD   SizeOfZeroFill;
    DWORD   Characteristics;
} IMAGE_TLS_DIRECTORY64;
typedef IMAGE_TLS_DIRECTORY64 * PIMAGE_TLS_DIRECTORY64;
typedef struct _IMAGE_TLS_DIRECTORY32 {
    DWORD   StartAddressOfRawData;
    DWORD   EndAddressOfRawData;
    DWORD   AddressOfIndex;
    DWORD   AddressOfCallBacks;
    DWORD   SizeOfZeroFill;
    DWORD   Characteristics;
} IMAGE_TLS_DIRECTORY32;
typedef IMAGE_TLS_DIRECTORY32 * PIMAGE_TLS_DIRECTORY32;
typedef IMAGE_THUNK_DATA32              IMAGE_THUNK_DATA;
typedef PIMAGE_THUNK_DATA32             PIMAGE_THUNK_DATA;
typedef IMAGE_TLS_DIRECTORY32           IMAGE_TLS_DIRECTORY;
typedef PIMAGE_TLS_DIRECTORY32          PIMAGE_TLS_DIRECTORY;
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;
        DWORD   OriginalFirstThunk;
    };
    DWORD   TimeDateStamp;
    DWORD   ForwarderChain;
    DWORD   Name;
    DWORD   FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR  *PIMAGE_IMPORT_DESCRIPTOR;
typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
    DWORD   TimeDateStamp;
    WORD    OffsetModuleName;
    WORD    NumberOfModuleForwarderRefs;
} IMAGE_BOUND_IMPORT_DESCRIPTOR,  *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
typedef struct _IMAGE_BOUND_FORWARDER_REF {
    DWORD   TimeDateStamp;
    WORD    OffsetModuleName;
    WORD    Reserved;
} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
typedef struct _IMAGE_RESOURCE_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    WORD    NumberOfNamedEntries;
    WORD    NumberOfIdEntries;
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    union {
        struct {
            DWORD NameOffset:31;
            DWORD NameIsString:1;
        };
        DWORD   Name;
        WORD    Id;
    };
    union {
        DWORD   OffsetToData;
        struct {
            DWORD   OffsetToDirectory:31;
            DWORD   DataIsDirectory:1;
        };
    };
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;
typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
    WORD    Length;
    CHAR    NameString[ 1 ];
} IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING;
typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
    WORD    Length;
    WCHAR   NameString[ 1 ];
} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;
typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
    DWORD   OffsetToData;
    DWORD   Size;
    DWORD   CodePage;
    DWORD   Reserved;
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;
typedef struct {
    DWORD   Size;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   GlobalFlagsClear;
    DWORD   GlobalFlagsSet;
    DWORD   CriticalSectionDefaultTimeout;
    DWORD   DeCommitFreeBlockThreshold;
    DWORD   DeCommitTotalFreeThreshold;
    DWORD   LockPrefixTable;
    DWORD   MaximumAllocationSize;
    DWORD   VirtualMemoryThreshold;
    DWORD   ProcessHeapFlags;
    DWORD   ProcessAffinityMask;
    WORD    CSDVersion;
    WORD    Reserved1;
    DWORD   EditList;
    DWORD   SecurityCookie;
    DWORD   SEHandlerTable;
    DWORD   SEHandlerCount;
} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
typedef struct {
    DWORD      Size;
    DWORD      TimeDateStamp;
    WORD       MajorVersion;
    WORD       MinorVersion;
    DWORD      GlobalFlagsClear;
    DWORD      GlobalFlagsSet;
    DWORD      CriticalSectionDefaultTimeout;
    ULONGLONG  DeCommitFreeBlockThreshold;
    ULONGLONG  DeCommitTotalFreeThreshold;
    ULONGLONG  LockPrefixTable;
    ULONGLONG  MaximumAllocationSize;
    ULONGLONG  VirtualMemoryThreshold;
    ULONGLONG  ProcessAffinityMask;
    DWORD      ProcessHeapFlags;
    WORD       CSDVersion;
    WORD       Reserved1;
    ULONGLONG  EditList;
    ULONGLONG  SecurityCookie;
    ULONGLONG  SEHandlerTable;
    ULONGLONG  SEHandlerCount;
} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;
typedef IMAGE_LOAD_CONFIG_DIRECTORY32     IMAGE_LOAD_CONFIG_DIRECTORY;
typedef PIMAGE_LOAD_CONFIG_DIRECTORY32    PIMAGE_LOAD_CONFIG_DIRECTORY;
typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
    DWORD FuncStart;
    DWORD PrologLen : 8;
    DWORD FuncLen : 22;
    DWORD ThirtyTwoBit : 1;
    DWORD ExceptionFlag : 1;
} IMAGE_CE_RUNTIME_FUNCTION_ENTRY, * PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
    ULONGLONG BeginAddress;
    ULONGLONG EndAddress;
    ULONGLONG ExceptionHandler;
    ULONGLONG HandlerData;
    ULONGLONG PrologEndAddress;
} IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
    DWORD BeginAddress;
    DWORD EndAddress;
    DWORD ExceptionHandler;
    DWORD HandlerData;
    DWORD PrologEndAddress;
} IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
    DWORD BeginAddress;
    DWORD EndAddress;
    DWORD UnwindInfoAddress;
} _IMAGE_RUNTIME_FUNCTION_ENTRY, *_PIMAGE_RUNTIME_FUNCTION_ENTRY;
typedef  _IMAGE_RUNTIME_FUNCTION_ENTRY  IMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
typedef  _IMAGE_RUNTIME_FUNCTION_ENTRY  IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_DEBUG_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Type;
    DWORD   SizeOfData;
    DWORD   AddressOfRawData;
    DWORD   PointerToRawData;
} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
    DWORD   NumberOfSymbols;
    DWORD   LvaToFirstSymbol;
    DWORD   NumberOfLinenumbers;
    DWORD   LvaToFirstLinenumber;
    DWORD   RvaToFirstByteOfCode;
    DWORD   RvaToLastByteOfCode;
    DWORD   RvaToFirstByteOfData;
    DWORD   RvaToLastByteOfData;
} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;
typedef struct _FPO_DATA {
    DWORD       ulOffStart;
    DWORD       cbProcSize;
    DWORD       cdwLocals;
    WORD        cdwParams;
    WORD        cbProlog : 8;
    WORD        cbRegs   : 3;
    WORD        fHasSEH  : 1;
    WORD        fUseBP   : 1;
    WORD        reserved : 1;
    WORD        cbFrame  : 2;
} FPO_DATA, *PFPO_DATA;
typedef struct _IMAGE_DEBUG_MISC {
    DWORD       DataType;
    DWORD       Length;
    BOOLEAN     Unicode;
    BYTE        Reserved[ 3 ];
    BYTE        Data[ 1 ];
} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
typedef struct _IMAGE_FUNCTION_ENTRY {
    DWORD   StartingAddress;
    DWORD   EndingAddress;
    DWORD   EndOfPrologue;
} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;
typedef struct _IMAGE_FUNCTION_ENTRY64 {
    ULONGLONG   StartingAddress;
    ULONGLONG   EndingAddress;
    union {
        ULONGLONG   EndOfPrologue;
        ULONGLONG   UnwindInfoAddress;
    };
} IMAGE_FUNCTION_ENTRY64, *PIMAGE_FUNCTION_ENTRY64;
typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
    WORD        Signature;
    WORD        Flags;
    WORD        Machine;
    WORD        Characteristics;
    DWORD       TimeDateStamp;
    DWORD       CheckSum;
    DWORD       ImageBase;
    DWORD       SizeOfImage;
    DWORD       NumberOfSections;
    DWORD       ExportedNamesSize;
    DWORD       DebugDirectorySize;
    DWORD       SectionAlignment;
    DWORD       Reserved[2];
} IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER;
typedef struct _NON_PAGED_DEBUG_INFO {
    WORD        Signature;
    WORD        Flags;
    DWORD       Size;
    WORD        Machine;
    WORD        Characteristics;
    DWORD       TimeDateStamp;
    DWORD       CheckSum;
    DWORD       SizeOfImage;
    ULONGLONG   ImageBase;
} NON_PAGED_DEBUG_INFO, *PNON_PAGED_DEBUG_INFO;
typedef struct _ImageArchitectureHeader {
    unsigned int AmaskValue: 1;
    int :7;
    unsigned int AmaskShift: 8;
    int :16;
    DWORD FirstEntryRVA;
} IMAGE_ARCHITECTURE_HEADER, *PIMAGE_ARCHITECTURE_HEADER;
typedef struct _ImageArchitectureEntry {
    DWORD FixupInstRVA;
    DWORD NewInst;
} IMAGE_ARCHITECTURE_ENTRY, *PIMAGE_ARCHITECTURE_ENTRY;
typedef struct IMPORT_OBJECT_HEADER {
    WORD    Sig1;
    WORD    Sig2;
    WORD    Version;
    WORD    Machine;
    DWORD   TimeDateStamp;
    DWORD   SizeOfData;
    union {
        WORD    Ordinal;
        WORD    Hint;
    };
    WORD    Type : 2;
    WORD    NameType : 3;
    WORD    Reserved : 11;
} IMPORT_OBJECT_HEADER;
typedef enum IMPORT_OBJECT_TYPE
{
    IMPORT_OBJECT_CODE = 0,
    IMPORT_OBJECT_DATA = 1,
    IMPORT_OBJECT_CONST = 2,
} IMPORT_OBJECT_TYPE;
typedef enum IMPORT_OBJECT_NAME_TYPE
{
    IMPORT_OBJECT_ORDINAL = 0,
    IMPORT_OBJECT_NAME = 1,
    IMPORT_OBJECT_NAME_NO_PREFIX = 2,
    IMPORT_OBJECT_NAME_UNDECORATE = 3,
} IMPORT_OBJECT_NAME_TYPE;
typedef enum ReplacesCorHdrNumericDefines
{
    COMIMAGE_FLAGS_ILONLY               =0x00000001,
    COMIMAGE_FLAGS_32BITREQUIRED        =0x00000002,
    COMIMAGE_FLAGS_IL_LIBRARY           =0x00000004,
    COMIMAGE_FLAGS_STRONGNAMESIGNED     =0x00000008,
    COMIMAGE_FLAGS_TRACKDEBUGDATA       =0x00010000,
    COR_VERSION_MAJOR_V2                =2,
    COR_VERSION_MAJOR                   =COR_VERSION_MAJOR_V2,
    COR_VERSION_MINOR                   =0,
    COR_DELETED_NAME_LENGTH             =8,
    COR_VTABLEGAP_NAME_LENGTH           =8,
    NATIVE_TYPE_MAX_CB                  =1,
    COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE=0xFF,
    IMAGE_COR_MIH_METHODRVA             =0x01,
    IMAGE_COR_MIH_EHRVA                 =0x02,
    IMAGE_COR_MIH_BASICBLOCK            =0x08,
    COR_VTABLE_32BIT                    =0x01,
    COR_VTABLE_64BIT                    =0x02,
    COR_VTABLE_FROM_UNMANAGED           =0x04,
    COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN  =0x08,
    COR_VTABLE_CALL_MOST_DERIVED        =0x10,
    IMAGE_COR_EATJ_THUNK_SIZE           =32,
    MAX_CLASS_NAME                      =1024,
    MAX_PACKAGE_NAME                    =1024,
} ReplacesCorHdrNumericDefines;
typedef struct IMAGE_COR20_HEADER
{
    DWORD                   cb;
    WORD                    MajorRuntimeVersion;
    WORD                    MinorRuntimeVersion;
    IMAGE_DATA_DIRECTORY    MetaData;
    DWORD                   Flags;
    DWORD                   EntryPointToken;
    IMAGE_DATA_DIRECTORY    Resources;
    IMAGE_DATA_DIRECTORY    StrongNameSignature;
    IMAGE_DATA_DIRECTORY    CodeManagerTable;
    IMAGE_DATA_DIRECTORY    VTableFixups;
    IMAGE_DATA_DIRECTORY    ExportAddressTableJumps;
    IMAGE_DATA_DIRECTORY    ManagedNativeHeader;
} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
typedef union _SLIST_HEADER {
    ULONGLONG Alignment;
    struct {
        SINGLE_LIST_ENTRY Next;
        WORD   Depth;
        WORD   Sequence;
    };
} SLIST_HEADER, *PSLIST_HEADER;

void

RtlInitializeSListHead (
     PSLIST_HEADER ListHead
    );

PSINGLE_LIST_ENTRY

RtlFirstEntrySList (
     const SLIST_HEADER *ListHead
    );

PSINGLE_LIST_ENTRY

RtlInterlockedPopEntrySList (
     PSLIST_HEADER ListHead
    );

PSINGLE_LIST_ENTRY

RtlInterlockedPushEntrySList (
     PSLIST_HEADER ListHead,
     PSINGLE_LIST_ENTRY ListEntry
    );

PSINGLE_LIST_ENTRY

RtlInterlockedFlushSList (
     PSLIST_HEADER ListHead
    );

WORD

RtlQueryDepthSList (
     PSLIST_HEADER ListHead
    );
typedef union _RTL_RUN_ONCE {
    PVOID Ptr;
} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
typedef
DWORD
( *PRTL_RUN_ONCE_INIT_FN) (
     PRTL_RUN_ONCE RunOnce,
     PVOID Parameter,
     PVOID *Context
    );
void
RtlRunOnceInitialize (
     PRTL_RUN_ONCE RunOnce
    );
DWORD
RtlRunOnceExecuteOnce (
     PRTL_RUN_ONCE RunOnce,
      PRTL_RUN_ONCE_INIT_FN InitFn,
     PVOID Parameter,
     PVOID *Context
    );
DWORD
RtlRunOnceBeginInitialize (
     PRTL_RUN_ONCE RunOnce,
     DWORD Flags,
     PVOID *Context
    );
DWORD
RtlRunOnceComplete (
     PRTL_RUN_ONCE RunOnce,
     DWORD Flags,
     PVOID Context
    );
__inline
DWORD
HEAP_MAKE_TAG_FLAGS (
     DWORD TagBase,
     DWORD Tag
    )
{
    __pragma(warning(push)) __pragma(warning(disable : 4548)) do {__noop(TagBase);} while((0,0) __pragma(warning(pop)) );
    return ((DWORD)((TagBase) + ((Tag) << 18)));
}

WORD

RtlCaptureStackBackTrace(
     DWORD FramesToSkip,
     DWORD FramesToCapture,
     PVOID *BackTrace,
     PDWORD BackTraceHash
   );

void

RtlCaptureContext (
     PCONTEXT ContextRecord
    );

SIZE_T

RtlCompareMemory (
    const void *Source1,
    const void *Source2,
    SIZE_T Length
    );
__inline
PVOID
RtlSecureZeroMemory(
     PVOID ptr,
     SIZE_T cnt
    )
{
    volatile char *vptr = (volatile char *)ptr;
    while (cnt) {
        *vptr = 0;
        vptr++;
        cnt--;
    }
    return ptr;
}
typedef struct _MESSAGE_RESOURCE_ENTRY {
    WORD   Length;
    WORD   Flags;
    BYTE  Text[ 1 ];
} MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
typedef struct _MESSAGE_RESOURCE_BLOCK {
    DWORD LowId;
    DWORD HighId;
    DWORD OffsetToEntries;
} MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
typedef struct _MESSAGE_RESOURCE_DATA {
    DWORD NumberOfBlocks;
    MESSAGE_RESOURCE_BLOCK Blocks[ 1 ];
} MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
typedef struct _OSVERSIONINFOA {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    CHAR   szCSDVersion[ 128 ];
} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
typedef struct _OSVERSIONINFOW {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    WCHAR  szCSDVersion[ 128 ];
} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
typedef OSVERSIONINFOA OSVERSIONINFO;
typedef POSVERSIONINFOA POSVERSIONINFO;
typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    CHAR   szCSDVersion[ 128 ];
    WORD   wServicePackMajor;
    WORD   wServicePackMinor;
    WORD   wSuiteMask;
    BYTE  wProductType;
    BYTE  wReserved;
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
typedef struct _OSVERSIONINFOEXW {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    WCHAR  szCSDVersion[ 128 ];
    WORD   wServicePackMajor;
    WORD   wServicePackMinor;
    WORD   wSuiteMask;
    BYTE  wProductType;
    BYTE  wReserved;
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;

ULONGLONG

VerSetConditionMask(
          ULONGLONG   ConditionMask,
          DWORD   TypeMask,
          BYTE    Condition
        );

BOOLEAN

RtlGetProductInfo(
      DWORD  OSMajorVersion,
      DWORD  OSMinorVersion,
      DWORD  SpMajorVersion,
      DWORD  SpMinorVersion,
     PDWORD ReturnedProductType
    );
typedef struct _RTL_CRITICAL_SECTION_DEBUG {
    WORD   Type;
    WORD   CreatorBackTraceIndex;
    struct _RTL_CRITICAL_SECTION *CriticalSection;
    LIST_ENTRY ProcessLocksList;
    DWORD EntryCount;
    DWORD ContentionCount;
    DWORD Flags;
    WORD   CreatorBackTraceIndexHigh;
    WORD   SpareWORD  ;
} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
typedef struct _RTL_CRITICAL_SECTION {
    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
    LONG LockCount;
    LONG RecursionCount;
    HANDLE OwningThread;
    HANDLE LockSemaphore;
    ULONG_PTR SpinCount;
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
typedef struct _RTL_SRWLOCK {
        PVOID Ptr;
} RTL_SRWLOCK, *PRTL_SRWLOCK;
typedef struct _RTL_CONDITION_VARIABLE {
        PVOID Ptr;
} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
typedef LONG ( *PVECTORED_EXCEPTION_HANDLER)(
    struct _EXCEPTION_POINTERS *ExceptionInfo
    );
typedef enum _HEAP_INFORMATION_CLASS {
    HeapCompatibilityInformation,
    HeapEnableTerminationOnCorruption
} HEAP_INFORMATION_CLASS;
typedef void ( * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
typedef void ( * WORKERCALLBACKFUNC) (PVOID );
typedef void ( * APC_CALLBACK_FUNCTION) (DWORD   , PVOID, PVOID);
typedef
void
( *PFLS_CALLBACK_FUNCTION) (
     PVOID lpFlsData
    );
typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
    ActivationContextBasicInformation                       = 1,
    ActivationContextDetailedInformation                    = 2,
    AssemblyDetailedInformationInActivationContext          = 3,
    FileInformationInAssemblyOfAssemblyInActivationContext  = 4,
    RunlevelInformationInActivationContext                  = 5,
    MaxActivationContextInfoClass,
    AssemblyDetailedInformationInActivationContxt           = 3,
    FileInformationInAssemblyOfAssemblyInActivationContxt   = 4
} ACTIVATION_CONTEXT_INFO_CLASS;
typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
    DWORD ulAssemblyIndex;
    DWORD ulFileIndexInAssembly;
} ACTIVATION_CONTEXT_QUERY_INDEX, * PACTIVATION_CONTEXT_QUERY_INDEX;
typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX * PCACTIVATION_CONTEXT_QUERY_INDEX;
typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
    DWORD ulFlags;
    DWORD ulFilenameLength;
    DWORD ulPathLength;
    PCWSTR lpFileName;
    PCWSTR lpFilePath;
} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;
typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
    DWORD ulFlags;
    DWORD ulEncodedAssemblyIdentityLength;
    DWORD ulManifestPathType;
    DWORD ulManifestPathLength;
    LARGE_INTEGER liManifestLastWriteTime;
    DWORD ulPolicyPathType;
    DWORD ulPolicyPathLength;
    LARGE_INTEGER liPolicyLastWriteTime;
    DWORD ulMetadataSatelliteRosterIndex;
    DWORD ulManifestVersionMajor;
    DWORD ulManifestVersionMinor;
    DWORD ulPolicyVersionMajor;
    DWORD ulPolicyVersionMinor;
    DWORD ulAssemblyDirectoryNameLength;
    PCWSTR lpAssemblyEncodedAssemblyIdentity;
    PCWSTR lpAssemblyManifestPath;
    PCWSTR lpAssemblyPolicyPath;
    PCWSTR lpAssemblyDirectoryName;
    DWORD  ulFileCount;
} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, * PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
typedef const struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION * PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION ;
typedef enum
{
    ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,
    ACTCTX_RUN_LEVEL_AS_INVOKER,
    ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,
    ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,
    ACTCTX_RUN_LEVEL_NUMBERS
} ACTCTX_REQUESTED_RUN_LEVEL;
typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
    DWORD ulFlags;
    ACTCTX_REQUESTED_RUN_LEVEL  RunLevel;
    DWORD UiAccess;
} ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION, * PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION * PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION ;
typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
    DWORD dwFlags;
    DWORD ulFormatVersion;
    DWORD ulAssemblyCount;
    DWORD ulRootManifestPathType;
    DWORD ulRootManifestPathChars;
    DWORD ulRootConfigurationPathType;
    DWORD ulRootConfigurationPathChars;
    DWORD ulAppDirPathType;
    DWORD ulAppDirPathChars;
    PCWSTR lpRootManifestPath;
    PCWSTR lpRootConfigurationPath;
    PCWSTR lpAppDirPath;
} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
typedef const struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
typedef struct _EVENTLOGRECORD {
    DWORD  Length;
    DWORD  Reserved;
    DWORD  RecordNumber;
    DWORD  TimeGenerated;
    DWORD  TimeWritten;
    DWORD  EventID;
    WORD   EventType;
    WORD   NumStrings;
    WORD   EventCategory;
    WORD   ReservedFlags;
    DWORD  ClosingRecordNumber;
    DWORD  StringOffset;
    DWORD  UserSidLength;
    DWORD  UserSidOffset;
    DWORD  DataLength;
    DWORD  DataOffset;
} EVENTLOGRECORD, *PEVENTLOGRECORD;
typedef struct _EVENTSFORLOGFILE{
    DWORD           ulSize;
    WCHAR           szLogicalLogFile[256];
    DWORD           ulNumRecords;
    EVENTLOGRECORD  pEventLogRecords[];
}EVENTSFORLOGFILE, *PEVENTSFORLOGFILE;
typedef struct _PACKEDEVENTINFO{
    DWORD               ulSize;
    DWORD               ulNumEventsForLogFile;
    DWORD               ulOffsets[];
}PACKEDEVENTINFO, *PPACKEDEVENTINFO;

typedef enum _CM_SERVICE_NODE_TYPE {
    DriverType               = 0x00000001,
    FileSystemType           = 0x00000002,
    Win32ServiceOwnProcess   = 0x00000010,
    Win32ServiceShareProcess = 0x00000020,
    AdapterType              = 0x00000004,
    RecognizerType           = 0x00000008
} SERVICE_NODE_TYPE;
typedef enum _CM_SERVICE_LOAD_TYPE {
    BootLoad    = 0x00000000,
    SystemLoad  = 0x00000001,
    AutoLoad    = 0x00000002,
    DemandLoad  = 0x00000003,
    DisableLoad = 0x00000004
} SERVICE_LOAD_TYPE;
typedef enum _CM_ERROR_CONTROL_TYPE {
    IgnoreError   = 0x00000000,
    NormalError   = 0x00000001,
    SevereError   = 0x00000002,
    CriticalError = 0x00000003
} SERVICE_ERROR_TYPE;
typedef struct _TAPE_ERASE {
    DWORD Type;
    BOOLEAN Immediate;
} TAPE_ERASE, *PTAPE_ERASE;
typedef struct _TAPE_PREPARE {
    DWORD Operation;
    BOOLEAN Immediate;
} TAPE_PREPARE, *PTAPE_PREPARE;
typedef struct _TAPE_WRITE_MARKS {
    DWORD Type;
    DWORD Count;
    BOOLEAN Immediate;
} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;
typedef struct _TAPE_GET_POSITION {
    DWORD Type;
    DWORD Partition;
    LARGE_INTEGER Offset;
} TAPE_GET_POSITION, *PTAPE_GET_POSITION;
typedef struct _TAPE_SET_POSITION {
    DWORD Method;
    DWORD Partition;
    LARGE_INTEGER Offset;
    BOOLEAN Immediate;
} TAPE_SET_POSITION, *PTAPE_SET_POSITION;
typedef struct _TAPE_GET_DRIVE_PARAMETERS {
    BOOLEAN ECC;
    BOOLEAN Compression;
    BOOLEAN DataPadding;
    BOOLEAN ReportSetmarks;
    DWORD DefaultBlockSize;
    DWORD MaximumBlockSize;
    DWORD MinimumBlockSize;
    DWORD MaximumPartitionCount;
    DWORD FeaturesLow;
    DWORD FeaturesHigh;
    DWORD EOTWarningZoneSize;
} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;
typedef struct _TAPE_SET_DRIVE_PARAMETERS {
    BOOLEAN ECC;
    BOOLEAN Compression;
    BOOLEAN DataPadding;
    BOOLEAN ReportSetmarks;
    DWORD EOTWarningZoneSize;
} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;
typedef struct _TAPE_GET_MEDIA_PARAMETERS {
    LARGE_INTEGER Capacity;
    LARGE_INTEGER Remaining;
    DWORD BlockSize;
    DWORD PartitionCount;
    BOOLEAN WriteProtected;
} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;
typedef struct _TAPE_SET_MEDIA_PARAMETERS {
    DWORD BlockSize;
} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;
typedef struct _TAPE_CREATE_PARTITION {
    DWORD Method;
    DWORD Count;
    DWORD Size;
} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;
typedef struct _TAPE_WMI_OPERATIONS {
   DWORD Method;
   DWORD DataBufferSize;
   PVOID DataBuffer;
} TAPE_WMI_OPERATIONS, *PTAPE_WMI_OPERATIONS;
typedef enum _TAPE_DRIVE_PROBLEM_TYPE {
   TapeDriveProblemNone, TapeDriveReadWriteWarning,
   TapeDriveReadWriteError, TapeDriveReadWarning,
   TapeDriveWriteWarning, TapeDriveReadError,
   TapeDriveWriteError, TapeDriveHardwareError,
   TapeDriveUnsupportedMedia, TapeDriveScsiConnectionError,
   TapeDriveTimetoClean, TapeDriveCleanDriveNow,
   TapeDriveMediaLifeExpired, TapeDriveSnappedTape
} TAPE_DRIVE_PROBLEM_TYPE;
typedef GUID UOW, *PUOW;
typedef GUID CRM_PROTOCOL_ID, *PCRM_PROTOCOL_ID;
typedef ULONG NOTIFICATION_MASK;
typedef struct _TRANSACTION_NOTIFICATION {
    PVOID         TransactionKey;
    ULONG         TransactionNotification;
    LARGE_INTEGER TmVirtualClock;
    ULONG         ArgumentLength;
} TRANSACTION_NOTIFICATION, *PTRANSACTION_NOTIFICATION;
typedef struct _TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT {
    GUID   EnlistmentId;
    UOW    UOW;
} TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT, *PTRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT;
typedef ULONG SAVEPOINT_ID, *PSAVEPOINT_ID;
typedef struct _TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT {
    SAVEPOINT_ID SavepointId;
} TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT, *PTRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT;
typedef struct _TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT {
    ULONG PropagationCookie;
    GUID  UOW;
    GUID  TmIdentity;
    ULONG BufferLength;
} TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT, *PTRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT;
typedef struct _TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT {
    ULONG MarshalCookie;
    GUID  UOW;
} TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT, *PTRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT;
typedef TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT TRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT, *PTRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT;
typedef struct _KCRM_MARSHAL_HEADER {
    ULONG              VersionMajor;
    ULONG              VersionMinor;
    ULONG              NumProtocols;
    ULONG              Unused;
} KCRM_MARSHAL_HEADER, *PKCRM_MARSHAL_HEADER, * PRKCRM_MARSHAL_HEADER;
typedef struct _KCRM_TRANSACTION_BLOB {
    UOW                UOW;
    GUID               TmIdentity;
    ULONG              IsolationLevel;
    ULONG              IsolationFlags;
    ULONG              Timeout;
    WCHAR              Description[64];
} KCRM_TRANSACTION_BLOB, *PKCRM_TRANSACTION_BLOB, * PRKCRM_TRANSACTION_BLOB;
typedef struct _KCRM_PROTOCOL_BLOB {
    CRM_PROTOCOL_ID    ProtocolId;
     ULONG StaticInfoLength;
    ULONG              TransactionIdInfoLength;
    ULONG              Unused1;
    ULONG              Unused2;
} KCRM_PROTOCOL_BLOB, *PKCRM_PROTOCOL_BLOB, * PRKCRM_PROTOCOL_BLOB;
typedef enum _TRANSACTION_OUTCOME {
    TransactionOutcomeUndetermined = 1,
    TransactionOutcomeCommitted,
    TransactionOutcomeAborted,
} TRANSACTION_OUTCOME;
typedef enum _TRANSACTION_STATE {
    TransactionStateNormal = 1,
    TransactionStateIndoubt,
    TransactionStateCommittedNotify,
} TRANSACTION_STATE;
typedef struct _TRANSACTION_BASIC_INFORMATION {
    GUID    TransactionId;
    DWORD   State;
    DWORD   Outcome;
} TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION;
typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
    GUID    TmIdentity;
    LARGE_INTEGER VirtualClock;
} TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION;
typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
    GUID  LogIdentity;
} TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION;
typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
    DWORD LogPathLength;
     WCHAR LogPath[1];
} TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
    DWORD              IsolationLevel;
    DWORD              IsolationFlags;
    LARGE_INTEGER      Timeout;
    DWORD              Outcome;
    DWORD              DescriptionLength;
    WCHAR              Description[1];
} TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION;
typedef struct _TRANSACTION_BIND_INFORMATION {
    HANDLE TmHandle;
} TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION;
typedef struct _TRANSACTION_ENLISTMENT_PAIR {
    GUID   EnlistmentId;
    GUID   ResourceManagerId;
} TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR;
typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
    DWORD                       NumberOfEnlistments;
    TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
} TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION;
typedef struct _TRANSACTION_FULL_INFORMATION {
    DWORD   NameLength;
} TRANSACTION_FULL_INFORMATION, *PTRANSACTION_FULL_INFORMATION;
typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
    GUID    ResourceManagerId;
    DWORD   DescriptionLength;
    WCHAR   Description[1];
} RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION;
typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
    HANDLE    IoCompletionPortHandle;
    ULONG_PTR CompletionKey;
} RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION;
typedef struct _TRANSACTION_NAME_INFORMATION {
    DWORD   NameLength;
    WCHAR   Name[1];
} TRANSACTION_NAME_INFORMATION, *PTRANSACTION_NAME_INFORMATION;
typedef enum _TRANSACTION_INFORMATION_CLASS {
    TransactionBasicInformation,
    TransactionPropertiesInformation,
    TransactionEnlistmentInformation,
    TransactionFullInformation
    ,
    TransactionBindInformation
    ,
} TRANSACTION_INFORMATION_CLASS;
typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
    TransactionManagerBasicInformation,
    TransactionManagerLogInformation,
    TransactionManagerLogPathInformation,
    TransactionManagerOnlineProbeInformation
} TRANSACTIONMANAGER_INFORMATION_CLASS;
typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
    ResourceManagerBasicInformation,
    ResourceManagerCompletionInformation,
    ResourceManagerFullInformation
    ,
    ResourceManagerNameInformation
} RESOURCEMANAGER_INFORMATION_CLASS;
typedef struct _ENLISTMENT_BASIC_INFORMATION {
    GUID    EnlistmentId;
    GUID    TransactionId;
    GUID    ResourceManagerId;
} ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION;
typedef enum _ENLISTMENT_INFORMATION_CLASS {
    EnlistmentBasicInformation,
    EnlistmentRecoveryInformation,
    EnlistmentFullInformation
    ,
    EnlistmentNameInformation
} ENLISTMENT_INFORMATION_CLASS;
typedef struct _TRANSACTION_LIST_ENTRY {
    UOW    UOW;
} TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY;
typedef struct _TRANSACTION_LIST_INFORMATION {
    DWORD   NumberOfTransactions;
    TRANSACTION_LIST_ENTRY TransactionInformation[1];
} TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION;
typedef enum _KTMOBJECT_TYPE {
    KTMOBJECT_TRANSACTION,
    KTMOBJECT_TRANSACTION_MANAGER,
    KTMOBJECT_RESOURCE_MANAGER,
    KTMOBJECT_ENLISTMENT,
    KTMOBJECT_INVALID
} KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
typedef struct _KTMOBJECT_CURSOR {
    GUID    LastQuery;
    DWORD   ObjectIdCount;
    GUID    ObjectIds[1];
} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
typedef DWORD TP_VERSION, *PTP_VERSION;
typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE, *PTP_CALLBACK_INSTANCE;
typedef void ( *PTP_SIMPLE_CALLBACK)(
         PTP_CALLBACK_INSTANCE Instance,
     PVOID                 Context
    );
typedef struct _TP_POOL TP_POOL, *PTP_POOL;
typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP, *PTP_CLEANUP_GROUP;
typedef void ( *PTP_CLEANUP_GROUP_CANCEL_CALLBACK)(
     PVOID ObjectContext,
     PVOID CleanupContext
    );
typedef struct _TP_CALLBACK_ENVIRON {
    TP_VERSION                         Version;
    PTP_POOL                           Pool;
    PTP_CLEANUP_GROUP                  CleanupGroup;
    PTP_CLEANUP_GROUP_CANCEL_CALLBACK  CleanupGroupCancelCallback;
    PVOID                              RaceDll;
    struct _ACTIVATION_CONTEXT        *ActivationContext;
    PTP_SIMPLE_CALLBACK                FinalizationCallback;
    union {
        DWORD                          Flags;
        struct {
            DWORD                      LongFunction :  1;
            DWORD                      Private      : 31;
        } s;
    } u;
} TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON;
__inline
void
TpInitializeCallbackEnviron(
     PTP_CALLBACK_ENVIRON CallbackEnviron
    )
{
    CallbackEnviron->Version = 1;
    CallbackEnviron->Pool = ((void *)0);
    CallbackEnviron->CleanupGroup = ((void *)0);
    CallbackEnviron->CleanupGroupCancelCallback = ((void *)0);
    CallbackEnviron->RaceDll = ((void *)0);
    CallbackEnviron->ActivationContext = ((void *)0);
    CallbackEnviron->FinalizationCallback = ((void *)0);
    CallbackEnviron->u.Flags = 0;
}
__inline
void
TpSetCallbackThreadpool(
     PTP_CALLBACK_ENVIRON CallbackEnviron,
        PTP_POOL             Pool
    )
{
    CallbackEnviron->Pool = Pool;
}
__inline
void
TpSetCallbackCleanupGroup(
      PTP_CALLBACK_ENVIRON              CallbackEnviron,
         PTP_CLEANUP_GROUP                 CleanupGroup,
     PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
    )
{
    CallbackEnviron->CleanupGroup = CleanupGroup;
    CallbackEnviron->CleanupGroupCancelCallback = CleanupGroupCancelCallback;
}
__inline
void
TpSetCallbackActivationContext(
      PTP_CALLBACK_ENVIRON CallbackEnviron,
     struct _ACTIVATION_CONTEXT *ActivationContext
    )
{
    CallbackEnviron->ActivationContext = ActivationContext;
}
__inline
void
TpSetCallbackNoActivationContext(
     PTP_CALLBACK_ENVIRON CallbackEnviron
    )
{
    CallbackEnviron->ActivationContext = (struct _ACTIVATION_CONTEXT *)(LONG_PTR) -1;
}
__inline
void
TpSetCallbackLongFunction(
     PTP_CALLBACK_ENVIRON CallbackEnviron
    )
{
    CallbackEnviron->u.s.LongFunction = 1;
}
__inline
void
TpSetCallbackRaceWithDll(
     PTP_CALLBACK_ENVIRON CallbackEnviron,
        PVOID                DllHandle
    )
{
    CallbackEnviron->RaceDll = DllHandle;
}
__inline
void
TpSetCallbackFinalizationCallback(
     PTP_CALLBACK_ENVIRON CallbackEnviron,
        PTP_SIMPLE_CALLBACK  FinalizationCallback
    )
{
    CallbackEnviron->FinalizationCallback = FinalizationCallback;
}
__inline
void
TpDestroyCallbackEnviron(
     PTP_CALLBACK_ENVIRON CallbackEnviron
    )
{
    (CallbackEnviron);
}
typedef struct _TP_WORK TP_WORK, *PTP_WORK;
typedef void ( *PTP_WORK_CALLBACK)(
         PTP_CALLBACK_INSTANCE Instance,
     PVOID                 Context,
         PTP_WORK              Work
    );
typedef struct _TP_TIMER TP_TIMER, *PTP_TIMER;
typedef void ( *PTP_TIMER_CALLBACK)(
         PTP_CALLBACK_INSTANCE Instance,
     PVOID                 Context,
         PTP_TIMER             Timer
    );
typedef DWORD    TP_WAIT_RESULT;
typedef struct _TP_WAIT TP_WAIT, *PTP_WAIT;
typedef void ( *PTP_WAIT_CALLBACK)(
         PTP_CALLBACK_INSTANCE Instance,
     PVOID                 Context,
         PTP_WAIT              Wait,
            TP_WAIT_RESULT        WaitResult
    );
typedef struct _TP_IO TP_IO, *PTP_IO;
__inline struct _TEB * NtCurrentTeb( void ) { return (struct _TEB *) (ULONG_PTR) __readfsdword (0x18); }
typedef UINT_PTR            WPARAM;
typedef LONG_PTR            LPARAM;
typedef LONG_PTR            LRESULT;
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
struct HHOOK__ { int unused; }; typedef struct HHOOK__ *HHOOK;
typedef WORD                ATOM;
typedef HANDLE          *SPHANDLE;
typedef HANDLE           *LPHANDLE;
typedef HANDLE              HGLOBAL;
typedef HANDLE              HLOCAL;
typedef HANDLE              GLOBALHANDLE;
typedef HANDLE              LOCALHANDLE;
typedef int (  *FARPROC)();
typedef int (  *NEARPROC)();
typedef int ( *PROC)();
typedef void * HGDIOBJ;
struct HKEY__ { int unused; }; typedef struct HKEY__ *HKEY;
typedef HKEY *PHKEY;
struct HACCEL__ { int unused; }; typedef struct HACCEL__ *HACCEL;
struct HBITMAP__ { int unused; }; typedef struct HBITMAP__ *HBITMAP;
struct HBRUSH__ { int unused; }; typedef struct HBRUSH__ *HBRUSH;
struct HCOLORSPACE__ { int unused; }; typedef struct HCOLORSPACE__ *HCOLORSPACE;
struct HDC__ { int unused; }; typedef struct HDC__ *HDC;
struct HGLRC__ { int unused; }; typedef struct HGLRC__ *HGLRC;
struct HDESK__ { int unused; }; typedef struct HDESK__ *HDESK;
struct HENHMETAFILE__ { int unused; }; typedef struct HENHMETAFILE__ *HENHMETAFILE;
struct HFONT__ { int unused; }; typedef struct HFONT__ *HFONT;
struct HICON__ { int unused; }; typedef struct HICON__ *HICON;
struct HMENU__ { int unused; }; typedef struct HMENU__ *HMENU;
struct HMETAFILE__ { int unused; }; typedef struct HMETAFILE__ *HMETAFILE;
struct HINSTANCE__ { int unused; }; typedef struct HINSTANCE__ *HINSTANCE;
typedef HINSTANCE HMODULE;
struct HPALETTE__ { int unused; }; typedef struct HPALETTE__ *HPALETTE;
struct HPEN__ { int unused; }; typedef struct HPEN__ *HPEN;
struct HRGN__ { int unused; }; typedef struct HRGN__ *HRGN;
struct HRSRC__ { int unused; }; typedef struct HRSRC__ *HRSRC;
struct HSPRITE__ { int unused; }; typedef struct HSPRITE__ *HSPRITE;
struct HSTR__ { int unused; }; typedef struct HSTR__ *HSTR;
struct HTASK__ { int unused; }; typedef struct HTASK__ *HTASK;
struct HWINSTA__ { int unused; }; typedef struct HWINSTA__ *HWINSTA;
struct HKL__ { int unused; }; typedef struct HKL__ *HKL;
struct HWINEVENTHOOK__ { int unused; }; typedef struct HWINEVENTHOOK__ *HWINEVENTHOOK;
struct HMONITOR__ { int unused; }; typedef struct HMONITOR__ *HMONITOR;
struct HUMPD__ { int unused; }; typedef struct HUMPD__ *HUMPD;
typedef int HFILE;
typedef HICON HCURSOR;
typedef DWORD   COLORREF;
typedef DWORD   *LPCOLORREF;
typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT,  *NPRECT,  *LPRECT;
typedef const RECT * LPCRECT;
typedef struct _RECTL
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECTL, *PRECTL, *LPRECTL;
typedef const RECTL * LPCRECTL;
typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT,  *NPPOINT,  *LPPOINT;
typedef struct _POINTL
{
    LONG  x;
    LONG  y;
} POINTL, *PPOINTL;
typedef struct tagSIZE
{
    LONG        cx;
    LONG        cy;
} SIZE, *PSIZE, *LPSIZE;
typedef SIZE               SIZEL;
typedef SIZE               *PSIZEL, *LPSIZEL;
typedef struct tagPOINTS
{
    SHORT   x;
    SHORT   y;
} POINTS, *PPOINTS, *LPPOINTS;
typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
typedef struct _OVERLAPPED {
    ULONG_PTR Internal;
    ULONG_PTR InternalHigh;
    union {
        struct {
            DWORD Offset;
            DWORD OffsetHigh;
        };
        PVOID Pointer;
    };
    HANDLE  hEvent;
} OVERLAPPED, *LPOVERLAPPED;
typedef struct _OVERLAPPED_ENTRY {
    ULONG_PTR lpCompletionKey;
    LPOVERLAPPED lpOverlapped;
    ULONG_PTR Internal;
    DWORD dwNumberOfBytesTransferred;
} OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
typedef struct _SECURITY_ATTRIBUTES {
    DWORD nLength;
    LPVOID lpSecurityDescriptor;
    BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
typedef DWORD ( *PTHREAD_START_ROUTINE)(
    LPVOID lpThreadParameter
    );
typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
typedef void ( *PFIBER_START_ROUTINE)(
    LPVOID lpFiberParameter
    );
typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
typedef RTL_RUN_ONCE INIT_ONCE;
typedef PRTL_RUN_ONCE PINIT_ONCE;
typedef PRTL_RUN_ONCE LPINIT_ONCE;
typedef
BOOL
( *PINIT_ONCE_FN) (
     PINIT_ONCE InitOnce,
     PVOID Parameter,
     PVOID *Context
    );

void

InitOnceInitialize (
     PINIT_ONCE InitOnce
    );

BOOL

InitOnceExecuteOnce (
     PINIT_ONCE InitOnce,
      PINIT_ONCE_FN InitFn,
     PVOID Parameter,
     LPVOID *Context
    );

BOOL

InitOnceBeginInitialize (
     LPINIT_ONCE lpInitOnce,
     DWORD dwFlags,
     PBOOL fPending,
     LPVOID *lpContext
    );

BOOL

InitOnceComplete (
     LPINIT_ONCE lpInitOnce,
     DWORD dwFlags,
     LPVOID lpContext
    );
typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;

void

InitializeSRWLock (
      PSRWLOCK SRWLock
     );

void

ReleaseSRWLockExclusive (
      PSRWLOCK SRWLock
     );

void

ReleaseSRWLockShared (
      PSRWLOCK SRWLock
     );

void

AcquireSRWLockExclusive (
      PSRWLOCK SRWLock
     );

void

AcquireSRWLockShared (
      PSRWLOCK SRWLock
     );
typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;

void

InitializeConditionVariable (
     PCONDITION_VARIABLE ConditionVariable
    );

void

WakeConditionVariable (
     PCONDITION_VARIABLE ConditionVariable
    );

void

WakeAllConditionVariable (
     PCONDITION_VARIABLE ConditionVariable
    );

BOOL

SleepConditionVariableCS (
     PCONDITION_VARIABLE ConditionVariable,
     PCRITICAL_SECTION CriticalSection,
     DWORD dwMilliseconds
    );

BOOL

SleepConditionVariableSRW (
     PCONDITION_VARIABLE ConditionVariable,
     PSRWLOCK SRWLock,
     DWORD dwMilliseconds,
     ULONG Flags
    );

PVOID

EncodePointer (
     PVOID Ptr
    );

PVOID

DecodePointer (
     PVOID Ptr
    );

PVOID

EncodeSystemPointer (
     PVOID Ptr
    );

PVOID

DecodeSystemPointer (
     PVOID Ptr
    );
typedef PLDT_ENTRY LPLDT_ENTRY;
typedef struct _COMMPROP {
    WORD wPacketLength;
    WORD wPacketVersion;
    DWORD dwServiceMask;
    DWORD dwReserved1;
    DWORD dwMaxTxQueue;
    DWORD dwMaxRxQueue;
    DWORD dwMaxBaud;
    DWORD dwProvSubType;
    DWORD dwProvCapabilities;
    DWORD dwSettableParams;
    DWORD dwSettableBaud;
    WORD wSettableData;
    WORD wSettableStopParity;
    DWORD dwCurrentTxQueue;
    DWORD dwCurrentRxQueue;
    DWORD dwProvSpec1;
    DWORD dwProvSpec2;
    WCHAR wcProvChar[1];
} COMMPROP,*LPCOMMPROP;
typedef struct _COMSTAT {
    DWORD fCtsHold : 1;
    DWORD fDsrHold : 1;
    DWORD fRlsdHold : 1;
    DWORD fXoffHold : 1;
    DWORD fXoffSent : 1;
    DWORD fEof : 1;
    DWORD fTxim : 1;
    DWORD fReserved : 25;
    DWORD cbInQue;
    DWORD cbOutQue;
} COMSTAT, *LPCOMSTAT;
typedef struct _DCB {
    DWORD DCBlength;
    DWORD BaudRate;
    DWORD fBinary: 1;
    DWORD fParity: 1;
    DWORD fOutxCtsFlow:1;
    DWORD fOutxDsrFlow:1;
    DWORD fDtrControl:2;
    DWORD fDsrSensitivity:1;
    DWORD fTXContinueOnXoff: 1;
    DWORD fOutX: 1;
    DWORD fInX: 1;
    DWORD fErrorChar: 1;
    DWORD fNull: 1;
    DWORD fRtsControl:2;
    DWORD fAbortOnError:1;
    DWORD fDummy2:17;
    WORD wReserved;
    WORD XonLim;
    WORD XoffLim;
    BYTE ByteSize;
    BYTE Parity;
    BYTE StopBits;
    char XonChar;
    char XoffChar;
    char ErrorChar;
    char EofChar;
    char EvtChar;
    WORD wReserved1;
} DCB, *LPDCB;
typedef struct _COMMTIMEOUTS {
    DWORD ReadIntervalTimeout;
    DWORD ReadTotalTimeoutMultiplier;
    DWORD ReadTotalTimeoutConstant;
    DWORD WriteTotalTimeoutMultiplier;
    DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
typedef struct _COMMCONFIG {
    DWORD dwSize;
    WORD wVersion;
    WORD wReserved;
    DCB dcb;
    DWORD dwProviderSubType;
    DWORD dwProviderOffset;
    DWORD dwProviderSize;
    WCHAR wcProviderData[1];
} COMMCONFIG,*LPCOMMCONFIG;
typedef struct _SYSTEM_INFO {
    union {
        DWORD dwOemId;
        struct {
            WORD wProcessorArchitecture;
            WORD wReserved;
        };
    };
    DWORD dwPageSize;
    LPVOID lpMinimumApplicationAddress;
    LPVOID lpMaximumApplicationAddress;
    DWORD_PTR dwActiveProcessorMask;
    DWORD dwNumberOfProcessors;
    DWORD dwProcessorType;
    DWORD dwAllocationGranularity;
    WORD wProcessorLevel;
    WORD wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;
typedef struct _MEMORYSTATUS {
    DWORD dwLength;
    DWORD dwMemoryLoad;
    SIZE_T dwTotalPhys;
    SIZE_T dwAvailPhys;
    SIZE_T dwTotalPageFile;
    SIZE_T dwAvailPageFile;
    SIZE_T dwTotalVirtual;
    SIZE_T dwAvailVirtual;
} MEMORYSTATUS, *LPMEMORYSTATUS;
typedef struct _EXCEPTION_DEBUG_INFO {
    EXCEPTION_RECORD ExceptionRecord;
    DWORD dwFirstChance;
} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
typedef struct _CREATE_THREAD_DEBUG_INFO {
    HANDLE hThread;
    LPVOID lpThreadLocalBase;
    LPTHREAD_START_ROUTINE lpStartAddress;
} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
typedef struct _CREATE_PROCESS_DEBUG_INFO {
    HANDLE hFile;
    HANDLE hProcess;
    HANDLE hThread;
    LPVOID lpBaseOfImage;
    DWORD dwDebugInfoFileOffset;
    DWORD nDebugInfoSize;
    LPVOID lpThreadLocalBase;
    LPTHREAD_START_ROUTINE lpStartAddress;
    LPVOID lpImageName;
    WORD fUnicode;
} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
typedef struct _EXIT_THREAD_DEBUG_INFO {
    DWORD dwExitCode;
} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
typedef struct _EXIT_PROCESS_DEBUG_INFO {
    DWORD dwExitCode;
} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
typedef struct _LOAD_DLL_DEBUG_INFO {
    HANDLE hFile;
    LPVOID lpBaseOfDll;
    DWORD dwDebugInfoFileOffset;
    DWORD nDebugInfoSize;
    LPVOID lpImageName;
    WORD fUnicode;
} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
typedef struct _UNLOAD_DLL_DEBUG_INFO {
    LPVOID lpBaseOfDll;
} UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
typedef struct _OUTPUT_DEBUG_STRING_INFO {
    LPSTR lpDebugStringData;
    WORD fUnicode;
    WORD nDebugStringLength;
} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
typedef struct _RIP_INFO {
    DWORD dwError;
    DWORD dwType;
} RIP_INFO, *LPRIP_INFO;
typedef struct _DEBUG_EVENT {
    DWORD dwDebugEventCode;
    DWORD dwProcessId;
    DWORD dwThreadId;
    union {
        EXCEPTION_DEBUG_INFO Exception;
        CREATE_THREAD_DEBUG_INFO CreateThread;
        CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
        EXIT_THREAD_DEBUG_INFO ExitThread;
        EXIT_PROCESS_DEBUG_INFO ExitProcess;
        LOAD_DLL_DEBUG_INFO LoadDll;
        UNLOAD_DLL_DEBUG_INFO UnloadDll;
        OUTPUT_DEBUG_STRING_INFO DebugString;
        RIP_INFO RipInfo;
    } u;
} DEBUG_EVENT, *LPDEBUG_EVENT;
typedef struct _JIT_DEBUG_INFO {
    DWORD dwSize;
    DWORD dwProcessorArchitecture;
    DWORD dwThreadID;
    DWORD dwReserved0;
    ULONG64 lpExceptionAddress;
    ULONG64 lpExceptionRecord;
    ULONG64 lpContextRecord;
} JIT_DEBUG_INFO, *LPJIT_DEBUG_INFO;
typedef JIT_DEBUG_INFO JIT_DEBUG_INFO32, *LPJIT_DEBUG_INFO32;
typedef JIT_DEBUG_INFO JIT_DEBUG_INFO64, *LPJIT_DEBUG_INFO64;
typedef PCONTEXT LPCONTEXT;
typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;
typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
typedef struct _OFSTRUCT {
    BYTE cBytes;
    BYTE fFixedDisk;
    WORD nErrCode;
    WORD Reserved1;
    WORD Reserved2;
    CHAR szPathName[128];
} OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT;

LONG

InterlockedIncrement (
     LONG volatile *lpAddend
    );

LONG

InterlockedDecrement (
     LONG volatile *lpAddend
    );

LONG

InterlockedExchange (
     LONG volatile *Target,
        LONG Value
    );

LONG

InterlockedExchangeAdd (
     LONG volatile *Addend,
        LONG Value
    );

LONG

InterlockedCompareExchange (
     LONG volatile *Destination,
        LONG Exchange,
        LONG Comperand
    );

LONGLONG

InterlockedCompareExchange64 (
     LONGLONG volatile *Destination,
        LONGLONG Exchange,
        LONGLONG Comperand
    );
__inline
LONGLONG
InterlockedAnd64 (
     LONGLONG volatile *Destination,
        LONGLONG Value
    )
{
    LONGLONG Old;
    do {
        Old = *Destination;
    } while (InterlockedCompareExchange64(Destination,
                                          Old & Value,
                                          Old) != Old);
    return Old;
}
__inline
LONGLONG
InterlockedOr64 (
     LONGLONG volatile *Destination,
        LONGLONG Value
    )
{
    LONGLONG Old;
    do {
        Old = *Destination;
    } while (InterlockedCompareExchange64(Destination,
                                          Old | Value,
                                          Old) != Old);
    return Old;
}
__inline
LONGLONG
InterlockedXor64 (
     LONGLONG volatile *Destination,
        LONGLONG Value
    )
{
    LONGLONG Old;
    do {
        Old = *Destination;
    } while (InterlockedCompareExchange64(Destination,
                                          Old ^ Value,
                                          Old) != Old);
    return Old;
}
__inline
LONGLONG
InterlockedIncrement64 (
     LONGLONG volatile *Addend
    )
{
    LONGLONG Old;
    do {
        Old = *Addend;
    } while (InterlockedCompareExchange64(Addend,
                                          Old + 1,
                                          Old) != Old);
    return Old + 1;
}
__inline
LONGLONG
InterlockedDecrement64 (
     LONGLONG volatile *Addend
    )
{
    LONGLONG Old;
    do {
        Old = *Addend;
    } while (InterlockedCompareExchange64(Addend,
                                          Old - 1,
                                          Old) != Old);
    return Old - 1;
}
__inline
LONGLONG
InterlockedExchange64 (
     LONGLONG volatile *Target,
        LONGLONG Value
    )
{
    LONGLONG Old;
    do {
        Old = *Target;
    } while (InterlockedCompareExchange64(Target,
                                          Value,
                                          Old) != Old);
    return Old;
}
__inline
LONGLONG
InterlockedExchangeAdd64(
     LONGLONG volatile *Addend,
        LONGLONG Value
    )
{
    LONGLONG Old;
    do {
        Old = *Addend;
    } while (InterlockedCompareExchange64(Addend,
                                          Old + Value,
                                          Old) != Old);
    return Old;
}

void

InitializeSListHead (
     PSLIST_HEADER ListHead
    );

PSINGLE_LIST_ENTRY

InterlockedPopEntrySList (
     PSLIST_HEADER ListHead
    );

PSINGLE_LIST_ENTRY

InterlockedPushEntrySList (
     PSLIST_HEADER ListHead,
     PSINGLE_LIST_ENTRY ListEntry
    );

PSINGLE_LIST_ENTRY

InterlockedFlushSList (
     PSLIST_HEADER ListHead
    );

USHORT

QueryDepthSList (
     PSLIST_HEADER ListHead
    );

BOOL

FreeResource(
     HGLOBAL hResData
    );

LPVOID

LockResource(
     HGLOBAL hResData
    );
int

WinMain (
     HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,
     int nShowCmd
    );
int

wWinMain(
     HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPWSTR lpCmdLine,
     int nShowCmd
    );

BOOL

FreeLibrary (
     HMODULE hLibModule
    );

__declspec(noreturn)
void

FreeLibraryAndExitThread (
     HMODULE hLibModule,
     DWORD dwExitCode
    );

BOOL

DisableThreadLibraryCalls (
     HMODULE hLibModule
    );

FARPROC

GetProcAddress (
     HMODULE hModule,
     LPCSTR lpProcName
    );

DWORD

GetVersion (
    void
    );

HGLOBAL

GlobalAlloc (
     UINT uFlags,
     SIZE_T dwBytes
    );

HGLOBAL

GlobalReAlloc (
     HGLOBAL hMem,
     SIZE_T dwBytes,
     UINT uFlags
    );

SIZE_T

GlobalSize (
     HGLOBAL hMem
    );

UINT

GlobalFlags (
     HGLOBAL hMem
    );

LPVOID

GlobalLock (
     HGLOBAL hMem
    );

HGLOBAL

GlobalHandle (
     LPCVOID pMem
    );

BOOL

GlobalUnlock(
     HGLOBAL hMem
    );

HGLOBAL

GlobalFree(
     HGLOBAL hMem
    );

SIZE_T

GlobalCompact(
     DWORD dwMinFree
    );

void

GlobalFix(
     HGLOBAL hMem
    );

void

GlobalUnfix(
     HGLOBAL hMem
    );

LPVOID

GlobalWire(
     HGLOBAL hMem
    );

BOOL

GlobalUnWire(
     HGLOBAL hMem
    );

void

GlobalMemoryStatus(
     LPMEMORYSTATUS lpBuffer
    );
typedef struct _MEMORYSTATUSEX {
    DWORD dwLength;
    DWORD dwMemoryLoad;
    DWORDLONG ullTotalPhys;
    DWORDLONG ullAvailPhys;
    DWORDLONG ullTotalPageFile;
    DWORDLONG ullAvailPageFile;
    DWORDLONG ullTotalVirtual;
    DWORDLONG ullAvailVirtual;
    DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;

BOOL

GlobalMemoryStatusEx(
     LPMEMORYSTATUSEX lpBuffer
    );

HLOCAL

LocalAlloc(
     UINT uFlags,
     SIZE_T uBytes
    );

HLOCAL

LocalReAlloc(
     HLOCAL hMem,
     SIZE_T uBytes,
     UINT uFlags
    );

LPVOID

LocalLock(
     HLOCAL hMem
    );

HLOCAL

LocalHandle(
     LPCVOID pMem
    );

BOOL

LocalUnlock(
     HLOCAL hMem
    );

SIZE_T

LocalSize(
     HLOCAL hMem
    );

UINT

LocalFlags(
     HLOCAL hMem
    );

HLOCAL

LocalFree(
     HLOCAL hMem
    );

SIZE_T

LocalShrink(
     HLOCAL hMem,
     UINT cbNewSize
    );

SIZE_T

LocalCompact(
     UINT uMinFree
    );

BOOL

FlushInstructionCache(
     HANDLE hProcess,
     LPCVOID lpBaseAddress,
     SIZE_T dwSize
    );

void

FlushProcessWriteBuffers(
    void
    );

BOOL

QueryThreadCycleTime (
     HANDLE ThreadHandle,
     PULONG64 CycleTime
    );

BOOL

QueryProcessCycleTime (
     HANDLE ProcessHandle,
     PULONG64 CycleTime
    );

BOOL

QueryIdleProcessorCycleTime (
     PULONG BufferLength,
     PULONG64 ProcessorIdleCycleTime
    );

LPVOID

VirtualAlloc(
     LPVOID lpAddress,
         SIZE_T dwSize,
         DWORD flAllocationType,
         DWORD flProtect
    );

BOOL

VirtualFree(
     LPVOID lpAddress,
     SIZE_T dwSize,
     DWORD dwFreeType
    );

BOOL

VirtualProtect(
      LPVOID lpAddress,
      SIZE_T dwSize,
      DWORD flNewProtect,
     PDWORD lpflOldProtect
    );

SIZE_T

VirtualQuery(
     LPCVOID lpAddress,
     PMEMORY_BASIC_INFORMATION lpBuffer,
         SIZE_T dwLength
    );

LPVOID

VirtualAllocEx(
         HANDLE hProcess,
     LPVOID lpAddress,
         SIZE_T dwSize,
         DWORD flAllocationType,
         DWORD flProtect
    );

LPVOID

VirtualAllocExNuma(
         HANDLE hProcess,
     LPVOID lpAddress,
         SIZE_T dwSize,
         DWORD  flAllocationType,
         DWORD  flProtect,
         DWORD  nndPreferred
    );

UINT

GetWriteWatch(
     DWORD dwFlags,
     PVOID lpBaseAddress,
     SIZE_T dwRegionSize,
     PVOID *lpAddresses,
     ULONG_PTR *lpdwCount,
     PULONG lpdwGranularity
    );

UINT

ResetWriteWatch(
     LPVOID lpBaseAddress,
     SIZE_T dwRegionSize
    );

SIZE_T

GetLargePageMinimum(
    void
    );

UINT

EnumSystemFirmwareTables(
     DWORD FirmwareTableProviderSignature,
     PVOID pFirmwareTableEnumBuffer,
     DWORD BufferSize
    );

UINT

GetSystemFirmwareTable(
     DWORD FirmwareTableProviderSignature,
     DWORD FirmwareTableID,
     PVOID pFirmwareTableBuffer,
     DWORD BufferSize
    );

BOOL

VirtualFreeEx(
     HANDLE hProcess,
     LPVOID lpAddress,
     SIZE_T dwSize,
     DWORD  dwFreeType
    );

BOOL

VirtualProtectEx(
      HANDLE hProcess,
      LPVOID lpAddress,
      SIZE_T dwSize,
      DWORD flNewProtect,
     PDWORD lpflOldProtect
    );

SIZE_T

VirtualQueryEx(
         HANDLE hProcess,
     LPCVOID lpAddress,
     PMEMORY_BASIC_INFORMATION lpBuffer,
         SIZE_T dwLength
    );

HANDLE

HeapCreate(
     DWORD flOptions,
     SIZE_T dwInitialSize,
     SIZE_T dwMaximumSize
    );

BOOL

HeapDestroy(
     HANDLE hHeap
    );

LPVOID

HeapAlloc(
     HANDLE hHeap,
     DWORD dwFlags,
     SIZE_T dwBytes
    );

LPVOID

HeapReAlloc(
     HANDLE hHeap,
        DWORD dwFlags,
     LPVOID lpMem,
        SIZE_T dwBytes
    );

BOOL

HeapFree(
     HANDLE hHeap,
        DWORD dwFlags,
     LPVOID lpMem
    );

SIZE_T

HeapSize(
     HANDLE hHeap,
     DWORD dwFlags,
     LPCVOID lpMem
    );

BOOL

HeapValidate(
         HANDLE hHeap,
         DWORD dwFlags,
     LPCVOID lpMem
    );

SIZE_T

HeapCompact(
     HANDLE hHeap,
     DWORD dwFlags
    );

HANDLE

GetProcessHeap( void );

DWORD

GetProcessHeaps(
     DWORD NumberOfHeaps,
     PHANDLE ProcessHeaps
    );
typedef struct _PROCESS_HEAP_ENTRY {
    PVOID lpData;
    DWORD cbData;
    BYTE cbOverhead;
    BYTE iRegionIndex;
    WORD wFlags;
    union {
        struct {
            HANDLE hMem;
            DWORD dwReserved[ 3 ];
        } Block;
        struct {
            DWORD dwCommittedSize;
            DWORD dwUnCommittedSize;
            LPVOID lpFirstBlock;
            LPVOID lpLastBlock;
        } Region;
    };
} PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY;

BOOL

HeapLock(
     HANDLE hHeap
    );

BOOL

HeapUnlock(
     HANDLE hHeap
    );

BOOL

HeapWalk(
        HANDLE hHeap,
     LPPROCESS_HEAP_ENTRY lpEntry
    );

BOOL

HeapSetInformation (
     HANDLE HeapHandle,
     HEAP_INFORMATION_CLASS HeapInformationClass,
     PVOID HeapInformation,
     SIZE_T HeapInformationLength
    );

BOOL

HeapQueryInformation (
     HANDLE HeapHandle,
     HEAP_INFORMATION_CLASS HeapInformationClass,
     PVOID HeapInformation,
     SIZE_T HeapInformationLength,
     PSIZE_T ReturnLength
    );

BOOL

GetBinaryTypeA(
      LPCSTR lpApplicationName,
     LPDWORD  lpBinaryType
    );

BOOL

GetBinaryTypeW(
      LPCWSTR lpApplicationName,
     LPDWORD  lpBinaryType
    );

DWORD

GetShortPathNameA(
     LPCSTR lpszLongPath,
     LPSTR  lpszShortPath,
     DWORD cchBuffer
    );

DWORD

GetShortPathNameW(
     LPCWSTR lpszLongPath,
     LPWSTR  lpszShortPath,
     DWORD cchBuffer
    );

DWORD

GetLongPathNameA(
     LPCSTR lpszShortPath,
     LPSTR  lpszLongPath,
     DWORD cchBuffer
    );

DWORD

GetLongPathNameW(
     LPCWSTR lpszShortPath,
     LPWSTR  lpszLongPath,
     DWORD cchBuffer
    );

DWORD

GetLongPathNameTransactedA(
         LPCSTR lpszShortPath,
     LPSTR  lpszLongPath,
         DWORD cchBuffer,
         HANDLE hTransaction
    );

DWORD

GetLongPathNameTransactedW(
         LPCWSTR lpszShortPath,
     LPWSTR  lpszLongPath,
         DWORD cchBuffer,
         HANDLE hTransaction
    );

BOOL

GetProcessAffinityMask(
      HANDLE hProcess,
     PDWORD_PTR lpProcessAffinityMask,
     PDWORD_PTR lpSystemAffinityMask
    );

BOOL

SetProcessAffinityMask(
     HANDLE hProcess,
     DWORD_PTR dwProcessAffinityMask
    );

BOOL

GetProcessHandleCount(
      HANDLE hProcess,
     PDWORD pdwHandleCount
    );

BOOL

GetProcessTimes(
      HANDLE hProcess,
     LPFILETIME lpCreationTime,
     LPFILETIME lpExitTime,
     LPFILETIME lpKernelTime,
     LPFILETIME lpUserTime
    );

BOOL

GetProcessIoCounters(
      HANDLE hProcess,
     PIO_COUNTERS lpIoCounters
    );

BOOL

GetProcessWorkingSetSize(
      HANDLE hProcess,
     PSIZE_T lpMinimumWorkingSetSize,
     PSIZE_T lpMaximumWorkingSetSize
    );

BOOL

GetProcessWorkingSetSizeEx(
      HANDLE hProcess,
     PSIZE_T lpMinimumWorkingSetSize,
     PSIZE_T lpMaximumWorkingSetSize,
     PDWORD Flags
    );

BOOL

SetProcessWorkingSetSize(
     HANDLE hProcess,
     SIZE_T dwMinimumWorkingSetSize,
     SIZE_T dwMaximumWorkingSetSize
    );

BOOL

SetProcessWorkingSetSizeEx(
     HANDLE hProcess,
     SIZE_T dwMinimumWorkingSetSize,
     SIZE_T dwMaximumWorkingSetSize,
     DWORD Flags
    );

HANDLE

OpenProcess(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     DWORD dwProcessId
    );

HANDLE

GetCurrentProcess(
    void
    );

DWORD

GetCurrentProcessId(
    void
    );

__declspec(noreturn)
void

ExitProcess(
     UINT uExitCode
    );

BOOL

TerminateProcess(
     HANDLE hProcess,
     UINT uExitCode
    );

BOOL

GetExitCodeProcess(
      HANDLE hProcess,
     LPDWORD lpExitCode
    );

void

FatalExit(
     int ExitCode
    );

LPCH

GetEnvironmentStrings(
    void
    );

LPWCH

GetEnvironmentStringsW(
    void
    );

BOOL

SetEnvironmentStringsA(
      LPCH NewEnvironment
    );

BOOL

SetEnvironmentStringsW(
      LPWCH NewEnvironment
    );

BOOL

FreeEnvironmentStringsA(
      LPCH
    );

BOOL

FreeEnvironmentStringsW(
      LPWCH
    );

void

RaiseException(
     DWORD dwExceptionCode,
     DWORD dwExceptionFlags,
     DWORD nNumberOfArguments,
     const ULONG_PTR *lpArguments
    );

LONG

UnhandledExceptionFilter(
     struct _EXCEPTION_POINTERS *ExceptionInfo
    );
typedef LONG ( *PTOP_LEVEL_EXCEPTION_FILTER)(
     struct _EXCEPTION_POINTERS *ExceptionInfo
    );
typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;

LPTOP_LEVEL_EXCEPTION_FILTER

SetUnhandledExceptionFilter(
     LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
    );

LPVOID

CreateFiber(
         SIZE_T dwStackSize,
         LPFIBER_START_ROUTINE lpStartAddress,
     LPVOID lpParameter
    );

LPVOID

CreateFiberEx(
         SIZE_T dwStackCommitSize,
         SIZE_T dwStackReserveSize,
         DWORD dwFlags,
         LPFIBER_START_ROUTINE lpStartAddress,
     LPVOID lpParameter
    );

void

DeleteFiber(
     LPVOID lpFiber
    );

LPVOID

ConvertThreadToFiber(
     LPVOID lpParameter
    );

LPVOID

ConvertThreadToFiberEx(
     LPVOID lpParameter,
         DWORD dwFlags
    );

BOOL

ConvertFiberToThread(
    void
    );

BOOL

IsThreadAFiber(
    void
    );

void

SwitchToFiber(
     LPVOID lpFiber
    );

BOOL

SwitchToThread(
    void
    );

HANDLE

CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
          SIZE_T dwStackSize,
          LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID lpParameter,
          DWORD dwCreationFlags,
     LPDWORD lpThreadId
    );

HANDLE

CreateRemoteThread(
          HANDLE hProcess,
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
          SIZE_T dwStackSize,
          LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID lpParameter,
          DWORD dwCreationFlags,
     LPDWORD lpThreadId
    );

HANDLE

GetCurrentThread(
    void
    );

DWORD

GetCurrentThreadId(
    void
    );

BOOL

SetThreadStackGuarantee (
     PULONG StackSizeInBytes
    );

DWORD

GetProcessIdOfThread(
     HANDLE Thread
    );

DWORD

GetThreadId(
     HANDLE Thread
    );

DWORD

GetProcessId(
     HANDLE Process
    );

DWORD

GetCurrentProcessorNumber(
    void
    );

DWORD_PTR

SetThreadAffinityMask(
     HANDLE hThread,
     DWORD_PTR dwThreadAffinityMask
    );

DWORD

SetThreadIdealProcessor(
     HANDLE hThread,
     DWORD dwIdealProcessor
    );

BOOL

SetProcessPriorityBoost(
     HANDLE hProcess,
     BOOL bDisablePriorityBoost
    );

BOOL

GetProcessPriorityBoost(
      HANDLE hProcess,
     PBOOL  pDisablePriorityBoost
    );

BOOL

RequestWakeupLatency(
     LATENCY_TIME latency
    );

BOOL

IsSystemResumeAutomatic(
    void
    );

HANDLE

OpenThread(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     DWORD dwThreadId
    );

BOOL

SetThreadPriority(
     HANDLE hThread,
     int nPriority
    );

BOOL

SetThreadPriorityBoost(
     HANDLE hThread,
     BOOL bDisablePriorityBoost
    );

BOOL

GetThreadPriorityBoost(
      HANDLE hThread,
     PBOOL pDisablePriorityBoost
    );

int

GetThreadPriority(
     HANDLE hThread
    );

BOOL

GetThreadTimes(
      HANDLE hThread,
     LPFILETIME lpCreationTime,
     LPFILETIME lpExitTime,
     LPFILETIME lpKernelTime,
     LPFILETIME lpUserTime
    );

BOOL

GetThreadIOPendingFlag(
      HANDLE hThread,
     PBOOL  lpIOIsPending
    );

__declspec(noreturn)
void

ExitThread(
     DWORD dwExitCode
    );

BOOL

TerminateThread(
     HANDLE hThread,
     DWORD dwExitCode
    );

BOOL

GetExitCodeThread(
      HANDLE hThread,
     LPDWORD lpExitCode
    );

BOOL

GetThreadSelectorEntry(
      HANDLE hThread,
      DWORD dwSelector,
     LPLDT_ENTRY lpSelectorEntry
    );

EXECUTION_STATE

SetThreadExecutionState(
     EXECUTION_STATE esFlags
    );

DWORD

GetLastError(
    void
    );

void

SetLastError(
     DWORD dwErrCode
    );

BOOL

GetOverlappedResult(
      HANDLE hFile,
      LPOVERLAPPED lpOverlapped,
     LPDWORD lpNumberOfBytesTransferred,
      BOOL bWait
    );

HANDLE

CreateIoCompletionPort(
         HANDLE FileHandle,
     HANDLE ExistingCompletionPort,
         ULONG_PTR CompletionKey,
         DWORD NumberOfConcurrentThreads
    );

BOOL

GetQueuedCompletionStatus(
      HANDLE CompletionPort,
     LPDWORD lpNumberOfBytesTransferred,
     PULONG_PTR lpCompletionKey,
     LPOVERLAPPED *lpOverlapped,
      DWORD dwMilliseconds
    );

BOOL

GetQueuedCompletionStatusEx(
      HANDLE CompletionPort,
     LPOVERLAPPED_ENTRY lpCompletionPortEntries,
      ULONG ulCount,
     PULONG ulNumEntriesRemoved,
      DWORD dwMilliseconds,
      BOOL fAlertable
    );

BOOL

PostQueuedCompletionStatus(
         HANDLE CompletionPort,
         DWORD dwNumberOfBytesTransferred,
         ULONG_PTR dwCompletionKey,
     LPOVERLAPPED lpOverlapped
    );

BOOL

SetFileCompletionNotificationModes(
     HANDLE FileHandle,
     UCHAR Flags
    );

BOOL

SetFileIoOverlappedRange(
     HANDLE FileHandle,
     PUCHAR OverlappedRangeStart,
     ULONG Length
    );

UINT

GetErrorMode(
    void
    );

UINT

SetErrorMode(
     UINT uMode
    );

BOOL

ReadProcessMemory(
          HANDLE hProcess,
          LPCVOID lpBaseAddress,
     LPVOID lpBuffer,
          SIZE_T nSize,
     SIZE_T * lpNumberOfBytesRead
    );

BOOL

WriteProcessMemory(
          HANDLE hProcess,
          LPVOID lpBaseAddress,
     LPCVOID lpBuffer,
          SIZE_T nSize,
     SIZE_T * lpNumberOfBytesWritten
    );

BOOL

GetThreadContext(
        HANDLE hThread,
     LPCONTEXT lpContext
    );

BOOL

SetThreadContext(
     HANDLE hThread,
     const CONTEXT *lpContext
    );

BOOL

Wow64GetThreadContext(
        HANDLE hThread,
     PWOW64_CONTEXT lpContext
    );

BOOL

Wow64SetThreadContext(
     HANDLE hThread,
     const WOW64_CONTEXT *lpContext
    );

DWORD

SuspendThread(
     HANDLE hThread
    );

DWORD

Wow64SuspendThread(
     HANDLE hThread
    );

DWORD

ResumeThread(
     HANDLE hThread
    );
typedef
void
( *PAPCFUNC)(
     ULONG_PTR dwParam
    );

DWORD

QueueUserAPC(
     PAPCFUNC pfnAPC,
     HANDLE hThread,
     ULONG_PTR dwData
    );

BOOL

IsDebuggerPresent(
    void
    );

BOOL

CheckRemoteDebuggerPresent(
      HANDLE hProcess,
     PBOOL pbDebuggerPresent
    );

void

DebugBreak(
    void
    );

BOOL

WaitForDebugEvent(
     LPDEBUG_EVENT lpDebugEvent,
     DWORD dwMilliseconds
    );

BOOL

ContinueDebugEvent(
     DWORD dwProcessId,
     DWORD dwThreadId,
     DWORD dwContinueStatus
    );

BOOL

DebugActiveProcess(
     DWORD dwProcessId
    );

BOOL

DebugActiveProcessStop(
     DWORD dwProcessId
    );

BOOL

DebugSetProcessKillOnExit(
     BOOL KillOnExit
    );

BOOL

DebugBreakProcess (
     HANDLE Process
    );

void

InitializeCriticalSection(
     LPCRITICAL_SECTION lpCriticalSection
    );

void

EnterCriticalSection(
     LPCRITICAL_SECTION lpCriticalSection
    );

void

LeaveCriticalSection(
     LPCRITICAL_SECTION lpCriticalSection
    );

BOOL

InitializeCriticalSectionAndSpinCount(
     LPCRITICAL_SECTION lpCriticalSection,
      DWORD dwSpinCount
    );

BOOL

InitializeCriticalSectionEx(
     LPCRITICAL_SECTION lpCriticalSection,
      DWORD dwSpinCount,
      DWORD Flags
    );

DWORD

SetCriticalSectionSpinCount(
     LPCRITICAL_SECTION lpCriticalSection,
        DWORD dwSpinCount
    );

BOOL

TryEnterCriticalSection(
     LPCRITICAL_SECTION lpCriticalSection
    );

void

DeleteCriticalSection(
     LPCRITICAL_SECTION lpCriticalSection
    );

BOOL

SetEvent(
     HANDLE hEvent
    );

BOOL

ResetEvent(
     HANDLE hEvent
    );

BOOL

PulseEvent(
     HANDLE hEvent
    );

BOOL

ReleaseSemaphore(
          HANDLE hSemaphore,
          LONG lReleaseCount,
     LPLONG lpPreviousCount
    );

BOOL

ReleaseMutex(
     HANDLE hMutex
    );

DWORD

WaitForSingleObject(
     HANDLE hHandle,
     DWORD dwMilliseconds
    );

DWORD

WaitForMultipleObjects(
     DWORD nCount,
     const HANDLE *lpHandles,
     BOOL bWaitAll,
     DWORD dwMilliseconds
    );

void

Sleep(
     DWORD dwMilliseconds
    );

HGLOBAL

LoadResource(
     HMODULE hModule,
     HRSRC hResInfo
    );

DWORD

SizeofResource(
     HMODULE hModule,
     HRSRC hResInfo
    );

ATOM

GlobalDeleteAtom(
     ATOM nAtom
    );

BOOL

InitAtomTable(
     DWORD nSize
    );

ATOM

DeleteAtom(
     ATOM nAtom
    );

UINT

SetHandleCount(
     UINT uNumber
    );

DWORD

GetLogicalDrives(
    void
    );

BOOL

LockFile(
     HANDLE hFile,
     DWORD dwFileOffsetLow,
     DWORD dwFileOffsetHigh,
     DWORD nNumberOfBytesToLockLow,
     DWORD nNumberOfBytesToLockHigh
    );

BOOL

UnlockFile(
     HANDLE hFile,
     DWORD dwFileOffsetLow,
     DWORD dwFileOffsetHigh,
     DWORD nNumberOfBytesToUnlockLow,
     DWORD nNumberOfBytesToUnlockHigh
    );

BOOL

LockFileEx(
           HANDLE hFile,
           DWORD dwFlags,
     DWORD dwReserved,
           DWORD nNumberOfBytesToLockLow,
           DWORD nNumberOfBytesToLockHigh,
        LPOVERLAPPED lpOverlapped
    );

BOOL

UnlockFileEx(
           HANDLE hFile,
     DWORD dwReserved,
           DWORD nNumberOfBytesToUnlockLow,
           DWORD nNumberOfBytesToUnlockHigh,
        LPOVERLAPPED lpOverlapped
    );
typedef struct _BY_HANDLE_FILE_INFORMATION {
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD dwVolumeSerialNumber;
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
    DWORD nNumberOfLinks;
    DWORD nFileIndexHigh;
    DWORD nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;

BOOL

GetFileInformationByHandle(
      HANDLE hFile,
     LPBY_HANDLE_FILE_INFORMATION lpFileInformation
    );

DWORD

GetFileType(
     HANDLE hFile
    );

DWORD

GetFileSize(
          HANDLE hFile,
     LPDWORD lpFileSizeHigh
    );

BOOL

GetFileSizeEx(
      HANDLE hFile,
     PLARGE_INTEGER lpFileSize
    );

HANDLE

GetStdHandle(
     DWORD nStdHandle
    );

BOOL

SetStdHandle(
     DWORD nStdHandle,
     HANDLE hHandle
    );

BOOL

SetStdHandleEx(
          DWORD nStdHandle,
          HANDLE hHandle,
     PHANDLE phPrevValue
    );

BOOL

WriteFile(
            HANDLE hFile,
     LPCVOID lpBuffer,
            DWORD nNumberOfBytesToWrite,
       LPDWORD lpNumberOfBytesWritten,
     LPOVERLAPPED lpOverlapped
    );

BOOL

ReadFile(
            HANDLE hFile,
      LPVOID lpBuffer,
            DWORD nNumberOfBytesToRead,
       LPDWORD lpNumberOfBytesRead,
     LPOVERLAPPED lpOverlapped
    );

BOOL

FlushFileBuffers(
     HANDLE hFile
    );

BOOL

DeviceIoControl(
            HANDLE hDevice,
            DWORD dwIoControlCode,
     LPVOID lpInBuffer,
            DWORD nInBufferSize,
     LPVOID lpOutBuffer,
            DWORD nOutBufferSize,
       LPDWORD lpBytesReturned,
     LPOVERLAPPED lpOverlapped
    );

BOOL

RequestDeviceWakeup(
     HANDLE hDevice
    );

BOOL

CancelDeviceWakeupRequest(
     HANDLE hDevice
    );

BOOL

GetDevicePowerState(
      HANDLE hDevice,
     BOOL *pfOn
    );

BOOL

SetMessageWaitingIndicator(
     HANDLE hMsgIndicator,
     ULONG ulMsgCount
    );

BOOL

SetEndOfFile(
     HANDLE hFile
    );

DWORD

SetFilePointer(
            HANDLE hFile,
            LONG lDistanceToMove,
     PLONG lpDistanceToMoveHigh,
            DWORD dwMoveMethod
    );

BOOL

SetFilePointerEx(
          HANDLE hFile,
          LARGE_INTEGER liDistanceToMove,
     PLARGE_INTEGER lpNewFilePointer,
          DWORD dwMoveMethod
    );

BOOL

FindClose(
     HANDLE hFindFile
    );

BOOL

GetFileTime(
          HANDLE hFile,
     LPFILETIME lpCreationTime,
     LPFILETIME lpLastAccessTime,
     LPFILETIME lpLastWriteTime
    );

BOOL

SetFileTime(
         HANDLE hFile,
     const FILETIME *lpCreationTime,
     const FILETIME *lpLastAccessTime,
     const FILETIME *lpLastWriteTime
    );

BOOL

SetFileValidData(
     HANDLE hFile,
     LONGLONG ValidDataLength
    );

BOOL

SetFileShortNameA(
     HANDLE hFile,
     LPCSTR lpShortName
    );

BOOL

SetFileShortNameW(
     HANDLE hFile,
     LPCWSTR lpShortName
    );

BOOL

CloseHandle(
     HANDLE hObject
    );

BOOL

DuplicateHandle(
            HANDLE hSourceProcessHandle,
            HANDLE hSourceHandle,
            HANDLE hTargetProcessHandle,
     LPHANDLE lpTargetHandle,
            DWORD dwDesiredAccess,
            BOOL bInheritHandle,
            DWORD dwOptions
    );

BOOL

GetHandleInformation(
      HANDLE hObject,
     LPDWORD lpdwFlags
    );

BOOL

SetHandleInformation(
     HANDLE hObject,
     DWORD dwMask,
     DWORD dwFlags
    );

DWORD

LoadModule(
     LPCSTR lpModuleName,
     LPVOID lpParameterBlock
    );

UINT

WinExec(
     LPCSTR lpCmdLine,
     UINT uCmdShow
    );

BOOL

ClearCommBreak(
     HANDLE hFile
    );

BOOL

ClearCommError(
          HANDLE hFile,
     LPDWORD lpErrors,
     LPCOMSTAT lpStat
    );

BOOL

SetupComm(
     HANDLE hFile,
     DWORD dwInQueue,
     DWORD dwOutQueue
    );

BOOL

EscapeCommFunction(
     HANDLE hFile,
     DWORD dwFunc
    );

BOOL

GetCommConfig(
          HANDLE hCommDev,
     LPCOMMCONFIG lpCC,
       LPDWORD lpdwSize
    );

BOOL

GetCommMask(
      HANDLE hFile,
     LPDWORD lpEvtMask
    );

BOOL

GetCommProperties(
        HANDLE hFile,
     LPCOMMPROP lpCommProp
    );

BOOL

GetCommModemStatus(
      HANDLE hFile,
     LPDWORD lpModemStat
    );

BOOL

GetCommState(
      HANDLE hFile,
     LPDCB lpDCB
    );

BOOL

GetCommTimeouts(
      HANDLE hFile,
     LPCOMMTIMEOUTS lpCommTimeouts
    );

BOOL

PurgeComm(
     HANDLE hFile,
     DWORD dwFlags
    );

BOOL

SetCommBreak(
     HANDLE hFile
    );

BOOL

SetCommConfig(
     HANDLE hCommDev,
     LPCOMMCONFIG lpCC,
     DWORD dwSize
    );

BOOL

SetCommMask(
     HANDLE hFile,
     DWORD dwEvtMask
    );

BOOL

SetCommState(
     HANDLE hFile,
     LPDCB lpDCB
    );

BOOL

SetCommTimeouts(
     HANDLE hFile,
     LPCOMMTIMEOUTS lpCommTimeouts
    );

BOOL

TransmitCommChar(
     HANDLE hFile,
     char cChar
    );

BOOL

WaitCommEvent(
            HANDLE hFile,
         LPDWORD lpEvtMask,
     LPOVERLAPPED lpOverlapped
    );

DWORD

SetTapePosition(
     HANDLE hDevice,
     DWORD dwPositionMethod,
     DWORD dwPartition,
     DWORD dwOffsetLow,
     DWORD dwOffsetHigh,
     BOOL bImmediate
    );

DWORD

GetTapePosition(
      HANDLE hDevice,
      DWORD dwPositionType,
     LPDWORD lpdwPartition,
     LPDWORD lpdwOffsetLow,
     LPDWORD lpdwOffsetHigh
    );

DWORD

PrepareTape(
     HANDLE hDevice,
     DWORD dwOperation,
     BOOL bImmediate
    );

DWORD

EraseTape(
     HANDLE hDevice,
     DWORD dwEraseType,
     BOOL bImmediate
    );

DWORD

CreateTapePartition(
     HANDLE hDevice,
     DWORD dwPartitionMethod,
     DWORD dwCount,
     DWORD dwSize
    );

DWORD

WriteTapemark(
     HANDLE hDevice,
     DWORD dwTapemarkType,
     DWORD dwTapemarkCount,
     BOOL bImmediate
    );

DWORD

GetTapeStatus(
     HANDLE hDevice
    );

DWORD

GetTapeParameters(
        HANDLE hDevice,
        DWORD dwOperation,
     LPDWORD lpdwSize,
     LPVOID lpTapeInformation
    );

DWORD

SetTapeParameters(
     HANDLE hDevice,
     DWORD dwOperation,
     LPVOID lpTapeInformation
    );

BOOL

Beep(
     DWORD dwFreq,
     DWORD dwDuration
    );

int

MulDiv(
     int nNumber,
     int nNumerator,
     int nDenominator
    );

void

GetSystemTime(
     LPSYSTEMTIME lpSystemTime
    );

void

GetSystemTimeAsFileTime(
     LPFILETIME lpSystemTimeAsFileTime
    );

BOOL

SetSystemTime(
     const SYSTEMTIME *lpSystemTime
    );

void

GetLocalTime(
     LPSYSTEMTIME lpSystemTime
    );

BOOL

SetLocalTime(
     const SYSTEMTIME *lpSystemTime
    );

void

GetSystemInfo(
     LPSYSTEM_INFO lpSystemInfo
    );

BOOL

SetSystemFileCacheSize (
     SIZE_T MinimumFileCacheSize,
     SIZE_T MaximumFileCacheSize,
     DWORD Flags
    );

BOOL

GetSystemFileCacheSize (
     PSIZE_T lpMinimumFileCacheSize,
     PSIZE_T lpMaximumFileCacheSize,
     PDWORD lpFlags
    );

BOOL

GetSystemRegistryQuota(
     PDWORD pdwQuotaAllowed,
     PDWORD pdwQuotaUsed
    );
BOOL

GetSystemTimes(
     LPFILETIME lpIdleTime,
     LPFILETIME lpKernelTime,
     LPFILETIME lpUserTime
    );

void

GetNativeSystemInfo(
     LPSYSTEM_INFO lpSystemInfo
    );

BOOL

IsProcessorFeaturePresent(
     DWORD ProcessorFeature
    );
typedef struct _TIME_ZONE_INFORMATION {
    LONG Bias;
    WCHAR StandardName[ 32 ];
    SYSTEMTIME StandardDate;
    LONG StandardBias;
    WCHAR DaylightName[ 32 ];
    SYSTEMTIME DaylightDate;
    LONG DaylightBias;
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
typedef struct _TIME_DYNAMIC_ZONE_INFORMATION {
    LONG Bias;
    WCHAR StandardName[ 32 ];
    SYSTEMTIME StandardDate;
    LONG StandardBias;
    WCHAR DaylightName[ 32 ];
    SYSTEMTIME DaylightDate;
    LONG DaylightBias;
    WCHAR TimeZoneKeyName[ 128 ];
    BOOLEAN DynamicDaylightTimeDisabled;
} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;

BOOL

SystemTimeToTzSpecificLocalTime(
     const TIME_ZONE_INFORMATION *lpTimeZoneInformation,
         const SYSTEMTIME *lpUniversalTime,
        LPSYSTEMTIME lpLocalTime
    );

BOOL

TzSpecificLocalTimeToSystemTime(
     const TIME_ZONE_INFORMATION *lpTimeZoneInformation,
         const SYSTEMTIME *lpLocalTime,
        LPSYSTEMTIME lpUniversalTime
    );

DWORD

GetTimeZoneInformation(
     LPTIME_ZONE_INFORMATION lpTimeZoneInformation
    );

BOOL

SetTimeZoneInformation(
     const TIME_ZONE_INFORMATION *lpTimeZoneInformation
    );

DWORD

GetDynamicTimeZoneInformation(
     PDYNAMIC_TIME_ZONE_INFORMATION pTimeZoneInformation
    );

BOOL

SetDynamicTimeZoneInformation(
     const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation
    );

BOOL

SystemTimeToFileTime(
      const SYSTEMTIME *lpSystemTime,
     LPFILETIME lpFileTime
    );

BOOL

FileTimeToLocalFileTime(
      const FILETIME *lpFileTime,
     LPFILETIME lpLocalFileTime
    );

BOOL

LocalFileTimeToFileTime(
      const FILETIME *lpLocalFileTime,
     LPFILETIME lpFileTime
    );

BOOL

FileTimeToSystemTime(
      const FILETIME *lpFileTime,
     LPSYSTEMTIME lpSystemTime
    );

LONG

CompareFileTime(
     const FILETIME *lpFileTime1,
     const FILETIME *lpFileTime2
    );

BOOL

FileTimeToDosDateTime(
      const FILETIME *lpFileTime,
     LPWORD lpFatDate,
     LPWORD lpFatTime
    );

BOOL

DosDateTimeToFileTime(
      WORD wFatDate,
      WORD wFatTime,
     LPFILETIME lpFileTime
    );

DWORD

GetTickCount(
    void
    );

ULONGLONG

GetTickCount64(
    void
    );

BOOL

SetSystemTimeAdjustment(
     DWORD dwTimeAdjustment,
     BOOL  bTimeAdjustmentDisabled
    );

BOOL

GetSystemTimeAdjustment(
     PDWORD lpTimeAdjustment,
     PDWORD lpTimeIncrement,
     PBOOL  lpTimeAdjustmentDisabled
    );

DWORD

FormatMessageA(
         DWORD dwFlags,
     LPCVOID lpSource,
         DWORD dwMessageId,
         DWORD dwLanguageId,
        LPSTR lpBuffer,
         DWORD nSize,
     va_list *Arguments
    );

DWORD

FormatMessageW(
         DWORD dwFlags,
     LPCVOID lpSource,
         DWORD dwMessageId,
         DWORD dwLanguageId,
        LPWSTR lpBuffer,
         DWORD nSize,
     va_list *Arguments
    );

BOOL

CreatePipe(
     PHANDLE hReadPipe,
     PHANDLE hWritePipe,
     LPSECURITY_ATTRIBUTES lpPipeAttributes,
         DWORD nSize
    );

BOOL

ConnectNamedPipe(
            HANDLE hNamedPipe,
     LPOVERLAPPED lpOverlapped
    );

BOOL

DisconnectNamedPipe(
     HANDLE hNamedPipe
    );

BOOL

SetNamedPipeHandleState(
         HANDLE hNamedPipe,
     LPDWORD lpMode,
     LPDWORD lpMaxCollectionCount,
     LPDWORD lpCollectDataTimeout
    );

BOOL

GetNamedPipeInfo(
          HANDLE hNamedPipe,
     LPDWORD lpFlags,
     LPDWORD lpOutBufferSize,
     LPDWORD lpInBufferSize,
     LPDWORD lpMaxInstances
    );

BOOL

PeekNamedPipe(
          HANDLE hNamedPipe,
     LPVOID lpBuffer,
          DWORD nBufferSize,
     LPDWORD lpBytesRead,
     LPDWORD lpTotalBytesAvail,
     LPDWORD lpBytesLeftThisMessage
    );

BOOL

TransactNamedPipe(
            HANDLE hNamedPipe,
     LPVOID lpInBuffer,
            DWORD nInBufferSize,
     LPVOID lpOutBuffer,
            DWORD nOutBufferSize,
           LPDWORD lpBytesRead,
     LPOVERLAPPED lpOverlapped
    );

HANDLE

CreateMailslotA(
         LPCSTR lpName,
         DWORD nMaxMessageSize,
         DWORD lReadTimeout,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

HANDLE

CreateMailslotW(
         LPCWSTR lpName,
         DWORD nMaxMessageSize,
         DWORD lReadTimeout,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

GetMailslotInfo(
          HANDLE hMailslot,
     LPDWORD lpMaxMessageSize,
     LPDWORD lpNextSize,
     LPDWORD lpMessageCount,
     LPDWORD lpReadTimeout
    );

BOOL

SetMailslotInfo(
     HANDLE hMailslot,
     DWORD lReadTimeout
    );

LPVOID

MapViewOfFile(
     HANDLE hFileMappingObject,
     DWORD dwDesiredAccess,
     DWORD dwFileOffsetHigh,
     DWORD dwFileOffsetLow,
     SIZE_T dwNumberOfBytesToMap
    );

BOOL

FlushViewOfFile(
     LPCVOID lpBaseAddress,
     SIZE_T dwNumberOfBytesToFlush
    );

BOOL

UnmapViewOfFile(
     LPCVOID lpBaseAddress
    );

BOOL

EncryptFileA(
     LPCSTR lpFileName
    );

BOOL

EncryptFileW(
     LPCWSTR lpFileName
    );

BOOL

DecryptFileA(
           LPCSTR lpFileName,
     DWORD dwReserved
    );

BOOL

DecryptFileW(
           LPCWSTR lpFileName,
     DWORD dwReserved
    );

BOOL

FileEncryptionStatusA(
      LPCSTR lpFileName,
     LPDWORD  lpStatus
    );

BOOL

FileEncryptionStatusW(
      LPCWSTR lpFileName,
     LPDWORD  lpStatus
    );
typedef
DWORD
( *PFE_EXPORT_FUNC)(
     PBYTE pbData,
     PVOID pvCallbackContext,
         ULONG ulLength
    );
typedef
DWORD
( *PFE_IMPORT_FUNC)(
     PBYTE pbData,
     PVOID pvCallbackContext,
      PULONG ulLength
    );

DWORD

OpenEncryptedFileRawA(
            LPCSTR lpFileName,
            ULONG    ulFlags,
     PVOID   *pvContext
    );

DWORD

OpenEncryptedFileRawW(
            LPCWSTR lpFileName,
            ULONG    ulFlags,
     PVOID   *pvContext
    );

DWORD

ReadEncryptedFileRaw(
         PFE_EXPORT_FUNC pfExportCallback,
     PVOID           pvCallbackContext,
         PVOID           pvContext
    );

DWORD

WriteEncryptedFileRaw(
         PFE_IMPORT_FUNC pfImportCallback,
     PVOID           pvCallbackContext,
         PVOID           pvContext
    );

void

CloseEncryptedFileRaw(
     PVOID           pvContext
    );

int

lstrcmpA(
     LPCSTR lpString1,
     LPCSTR lpString2
    );

int

lstrcmpW(
     LPCWSTR lpString1,
     LPCWSTR lpString2
    );

int

lstrcmpiA(
     LPCSTR lpString1,
     LPCSTR lpString2
    );

int

lstrcmpiW(
     LPCWSTR lpString1,
     LPCWSTR lpString2
    );

LPSTR

lstrcpynA(
     LPSTR lpString1,
     LPCSTR lpString2,
     int iMaxLength
    );

LPWSTR

lstrcpynW(
     LPWSTR lpString1,
     LPCWSTR lpString2,
     int iMaxLength
    );

LPSTR

lstrcpyA(
     LPSTR lpString1,
      LPCSTR lpString2
    );

LPWSTR

lstrcpyW(
     LPWSTR lpString1,
      LPCWSTR lpString2
    );

LPSTR

lstrcatA(
     LPSTR lpString1,
        LPCSTR lpString2
    );

LPWSTR

lstrcatW(
     LPWSTR lpString1,
        LPCWSTR lpString2
    );

int

lstrlenA(
     LPCSTR lpString
    );

int

lstrlenW(
     LPCWSTR lpString
    );

HFILE

OpenFile(
        LPCSTR lpFileName,
     LPOFSTRUCT lpReOpenBuff,
        UINT uStyle
    );

HFILE

_lopen(
     LPCSTR lpPathName,
     int iReadWrite
    );

HFILE

_lcreat(
     LPCSTR lpPathName,
     int  iAttribute
    );

UINT

_lread(
     HFILE hFile,
     LPVOID lpBuffer,
     UINT uBytes
    );

UINT

_lwrite(
     HFILE hFile,
     LPCCH lpBuffer,
     UINT uBytes
    );

long

_hread(
     HFILE hFile,
     LPVOID lpBuffer,
     long lBytes
    );

long

_hwrite(
     HFILE hFile,
     LPCCH lpBuffer,
     long lBytes
    );

HFILE

_lclose(
     HFILE hFile
    );

LONG

_llseek(
     HFILE hFile,
     LONG lOffset,
     int iOrigin
    );

BOOL

IsTextUnicode(
     const void* lpv,
            int iSize,
     LPINT lpiResult
    );

DWORD

FlsAlloc(
     PFLS_CALLBACK_FUNCTION lpCallback
    );

PVOID

FlsGetValue(
     DWORD dwFlsIndex
    );

BOOL

FlsSetValue(
         DWORD dwFlsIndex,
     PVOID lpFlsData
    );

BOOL

FlsFree(
     DWORD dwFlsIndex
    );

DWORD

TlsAlloc(
    void
    );

LPVOID

TlsGetValue(
     DWORD dwTlsIndex
    );

BOOL

TlsSetValue(
         DWORD dwTlsIndex,
     LPVOID lpTlsValue
    );

BOOL

TlsFree(
     DWORD dwTlsIndex
    );
typedef
void
( *LPOVERLAPPED_COMPLETION_ROUTINE)(
        DWORD dwErrorCode,
        DWORD dwNumberOfBytesTransfered,
     LPOVERLAPPED lpOverlapped
    );

DWORD

SleepEx(
     DWORD dwMilliseconds,
     BOOL bAlertable
    );

DWORD

WaitForSingleObjectEx(
     HANDLE hHandle,
     DWORD dwMilliseconds,
     BOOL bAlertable
    );

DWORD

WaitForMultipleObjectsEx(
     DWORD nCount,
     const HANDLE *lpHandles,
     BOOL bWaitAll,
     DWORD dwMilliseconds,
     BOOL bAlertable
    );

DWORD

SignalObjectAndWait(
     HANDLE hObjectToSignal,
     HANDLE hObjectToWaitOn,
     DWORD dwMilliseconds,
     BOOL bAlertable
    );

BOOL

ReadFileEx(
         HANDLE hFile,
      LPVOID lpBuffer,
         DWORD nNumberOfBytesToRead,
      LPOVERLAPPED lpOverlapped,
     LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
    );

BOOL

WriteFileEx(
         HANDLE hFile,
     LPCVOID lpBuffer,
         DWORD nNumberOfBytesToWrite,
      LPOVERLAPPED lpOverlapped,
     LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
    );

BOOL

BackupRead(
        HANDLE hFile,
     LPBYTE lpBuffer,
        DWORD nNumberOfBytesToRead,
       LPDWORD lpNumberOfBytesRead,
        BOOL bAbort,
        BOOL bProcessSecurity,
     LPVOID *lpContext
    );

BOOL

BackupSeek(
        HANDLE hFile,
        DWORD  dwLowBytesToSeek,
        DWORD  dwHighBytesToSeek,
       LPDWORD lpdwLowByteSeeked,
       LPDWORD lpdwHighByteSeeked,
     LPVOID *lpContext
    );

BOOL

BackupWrite(
        HANDLE hFile,
     LPBYTE lpBuffer,
        DWORD nNumberOfBytesToWrite,
       LPDWORD lpNumberOfBytesWritten,
        BOOL bAbort,
        BOOL bProcessSecurity,
     LPVOID *lpContext
    );
typedef struct _WIN32_STREAM_ID {
        DWORD          dwStreamId ;
        DWORD          dwStreamAttributes ;
        LARGE_INTEGER  Size ;
        DWORD          dwStreamNameSize ;
        WCHAR          cStreamName[ 1 ] ;
} WIN32_STREAM_ID, *LPWIN32_STREAM_ID ;

BOOL

ReadFileScatter(
           HANDLE hFile,
           FILE_SEGMENT_ELEMENT aSegmentArray[],
           DWORD nNumberOfBytesToRead,
     LPDWORD lpReserved,
        LPOVERLAPPED lpOverlapped
    );

BOOL

WriteFileGather(
           HANDLE hFile,
           FILE_SEGMENT_ELEMENT aSegmentArray[],
           DWORD nNumberOfBytesToWrite,
     LPDWORD lpReserved,
        LPOVERLAPPED lpOverlapped
    );
typedef struct _STARTUPINFOA {
    DWORD   cb;
    LPSTR   lpReserved;
    LPSTR   lpDesktop;
    LPSTR   lpTitle;
    DWORD   dwX;
    DWORD   dwY;
    DWORD   dwXSize;
    DWORD   dwYSize;
    DWORD   dwXCountChars;
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;
    DWORD   dwFlags;
    WORD    wShowWindow;
    WORD    cbReserved2;
    LPBYTE  lpReserved2;
    HANDLE  hStdInput;
    HANDLE  hStdOutput;
    HANDLE  hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;
typedef struct _STARTUPINFOW {
    DWORD   cb;
    LPWSTR  lpReserved;
    LPWSTR  lpDesktop;
    LPWSTR  lpTitle;
    DWORD   dwX;
    DWORD   dwY;
    DWORD   dwXSize;
    DWORD   dwYSize;
    DWORD   dwXCountChars;
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;
    DWORD   dwFlags;
    WORD    wShowWindow;
    WORD    cbReserved2;
    LPBYTE  lpReserved2;
    HANDLE  hStdInput;
    HANDLE  hStdOutput;
    HANDLE  hStdError;
} STARTUPINFOW, *LPSTARTUPINFOW;
typedef STARTUPINFOA STARTUPINFO;
typedef LPSTARTUPINFOA LPSTARTUPINFO;
typedef struct _STARTUPINFOEXA {
    STARTUPINFOA StartupInfo;
    struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;
} STARTUPINFOEXA, *LPSTARTUPINFOEXA;
typedef struct _STARTUPINFOEXW {
    STARTUPINFOW StartupInfo;
    struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;
} STARTUPINFOEXW, *LPSTARTUPINFOEXW;
typedef STARTUPINFOEXA STARTUPINFOEX;
typedef LPSTARTUPINFOEXA LPSTARTUPINFOEX;
typedef struct _WIN32_FIND_DATAA {
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
    DWORD dwReserved0;
    DWORD dwReserved1;
    CHAR   cFileName[ 260 ];
    CHAR   cAlternateFileName[ 14 ];
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
typedef struct _WIN32_FIND_DATAW {
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
    DWORD dwReserved0;
    DWORD dwReserved1;
    WCHAR  cFileName[ 260 ];
    WCHAR  cAlternateFileName[ 14 ];
} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
typedef WIN32_FIND_DATAA WIN32_FIND_DATA;
typedef PWIN32_FIND_DATAA PWIN32_FIND_DATA;
typedef LPWIN32_FIND_DATAA LPWIN32_FIND_DATA;
typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;

HANDLE

CreateMutexA(
     LPSECURITY_ATTRIBUTES lpMutexAttributes,
         BOOL bInitialOwner,
     LPCSTR lpName
    );

HANDLE

CreateMutexW(
     LPSECURITY_ATTRIBUTES lpMutexAttributes,
         BOOL bInitialOwner,
     LPCWSTR lpName
    );

HANDLE

OpenMutexA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpName
    );

HANDLE

OpenMutexW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpName
    );

HANDLE

CreateEventA(
     LPSECURITY_ATTRIBUTES lpEventAttributes,
         BOOL bManualReset,
         BOOL bInitialState,
     LPCSTR lpName
    );

HANDLE

CreateEventW(
     LPSECURITY_ATTRIBUTES lpEventAttributes,
         BOOL bManualReset,
         BOOL bInitialState,
     LPCWSTR lpName
    );

HANDLE

OpenEventA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpName
    );

HANDLE

OpenEventW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpName
    );

HANDLE

CreateSemaphoreA(
     LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
         LONG lInitialCount,
         LONG lMaximumCount,
     LPCSTR lpName
    );

HANDLE

CreateSemaphoreW(
     LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
         LONG lInitialCount,
         LONG lMaximumCount,
     LPCWSTR lpName
    );

HANDLE

OpenSemaphoreA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpName
    );

HANDLE

OpenSemaphoreW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpName
    );
typedef
void
( *PTIMERAPCROUTINE)(
     LPVOID lpArgToCompletionRoutine,
         DWORD dwTimerLowValue,
         DWORD dwTimerHighValue
    );

HANDLE

CreateWaitableTimerA(
     LPSECURITY_ATTRIBUTES lpTimerAttributes,
         BOOL bManualReset,
     LPCSTR lpTimerName
    );

HANDLE

CreateWaitableTimerW(
     LPSECURITY_ATTRIBUTES lpTimerAttributes,
         BOOL bManualReset,
     LPCWSTR lpTimerName
    );

HANDLE

OpenWaitableTimerA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpTimerName
    );

HANDLE

OpenWaitableTimerW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpTimerName
    );

BOOL

SetWaitableTimer(
         HANDLE hTimer,
         const LARGE_INTEGER *lpDueTime,
         LONG lPeriod,
     PTIMERAPCROUTINE pfnCompletionRoutine,
     LPVOID lpArgToCompletionRoutine,
         BOOL fResume
    );

BOOL

CancelWaitableTimer(
     HANDLE hTimer
    );

HANDLE

CreateMutexExA(
     LPSECURITY_ATTRIBUTES lpMutexAttributes,
     LPCSTR lpName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateMutexExW(
     LPSECURITY_ATTRIBUTES lpMutexAttributes,
     LPCWSTR lpName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateEventExA(
     LPSECURITY_ATTRIBUTES lpEventAttributes,
     LPCSTR lpName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateEventExW(
     LPSECURITY_ATTRIBUTES lpEventAttributes,
     LPCWSTR lpName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateSemaphoreExA(
        LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
            LONG lInitialCount,
            LONG lMaximumCount,
        LPCSTR lpName,
      DWORD dwFlags,
            DWORD dwDesiredAccess
    );

HANDLE

CreateSemaphoreExW(
        LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
            LONG lInitialCount,
            LONG lMaximumCount,
        LPCWSTR lpName,
      DWORD dwFlags,
            DWORD dwDesiredAccess
    );

HANDLE

CreateWaitableTimerExA(
     LPSECURITY_ATTRIBUTES lpTimerAttributes,
     LPCSTR lpTimerName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateWaitableTimerExW(
     LPSECURITY_ATTRIBUTES lpTimerAttributes,
     LPCWSTR lpTimerName,
         DWORD dwFlags,
         DWORD dwDesiredAccess
    );

HANDLE

CreateFileMappingA(
         HANDLE hFile,
     LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
         DWORD flProtect,
         DWORD dwMaximumSizeHigh,
         DWORD dwMaximumSizeLow,
     LPCSTR lpName
    );

HANDLE

CreateFileMappingW(
         HANDLE hFile,
     LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
         DWORD flProtect,
         DWORD dwMaximumSizeHigh,
         DWORD dwMaximumSizeLow,
     LPCWSTR lpName
    );

HANDLE

CreateFileMappingNumaA(
         HANDLE hFile,
     LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
         DWORD flProtect,
         DWORD dwMaximumSizeHigh,
         DWORD dwMaximumSizeLow,
     LPCSTR lpName,
         DWORD nndPreferred
    );

HANDLE

CreateFileMappingNumaW(
         HANDLE hFile,
     LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
         DWORD flProtect,
         DWORD dwMaximumSizeHigh,
         DWORD dwMaximumSizeLow,
     LPCWSTR lpName,
         DWORD nndPreferred
    );

HANDLE

OpenFileMappingA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpName
    );

HANDLE

OpenFileMappingW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpName
    );

DWORD

GetLogicalDriveStringsA(
     DWORD nBufferLength,
     LPSTR lpBuffer
    );

DWORD

GetLogicalDriveStringsW(
     DWORD nBufferLength,
     LPWSTR lpBuffer
    );
typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {
    LowMemoryResourceNotification,
    HighMemoryResourceNotification
} MEMORY_RESOURCE_NOTIFICATION_TYPE;

HANDLE

CreateMemoryResourceNotification(
     MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType
    );

BOOL

QueryMemoryResourceNotification(
      HANDLE ResourceNotificationHandle,
     PBOOL  ResourceState
    );

HMODULE

LoadLibraryA(
     LPCSTR lpLibFileName
    );

HMODULE

LoadLibraryW(
     LPCWSTR lpLibFileName
    );

HMODULE

LoadLibraryExA(
           LPCSTR lpLibFileName,
     HANDLE hFile,
           DWORD dwFlags
    );

HMODULE

LoadLibraryExW(
           LPCWSTR lpLibFileName,
     HANDLE hFile,
           DWORD dwFlags
    );

DWORD

GetModuleFileNameA(
     HMODULE hModule,
     LPCH lpFilename,
         DWORD nSize
    );

DWORD

GetModuleFileNameW(
     HMODULE hModule,
     LPWCH lpFilename,
         DWORD nSize
    );

HMODULE

GetModuleHandleA(
     LPCSTR lpModuleName
    );

HMODULE

GetModuleHandleW(
     LPCWSTR lpModuleName
    );
typedef
BOOL
(*
PGET_MODULE_HANDLE_EXA)(
            DWORD        dwFlags,
        LPCSTR     lpModuleName,
     HMODULE*    phModule
    );
typedef
BOOL
(*
PGET_MODULE_HANDLE_EXW)(
            DWORD        dwFlags,
        LPCWSTR     lpModuleName,
     HMODULE*    phModule
    );

BOOL

GetModuleHandleExA(
            DWORD    dwFlags,
        LPCSTR lpModuleName,
     HMODULE* phModule
    );

BOOL

GetModuleHandleExW(
            DWORD    dwFlags,
        LPCWSTR lpModuleName,
     HMODULE* phModule
    );

BOOL

NeedCurrentDirectoryForExePathA(
     LPCSTR ExeName
    );

BOOL

NeedCurrentDirectoryForExePathW(
     LPCWSTR ExeName
    );

BOOL

QueryFullProcessImageNameA(
     HANDLE hProcess,
     DWORD dwFlags,
     LPSTR lpExeName,
     PDWORD lpdwSize
    );

BOOL

QueryFullProcessImageNameW(
     HANDLE hProcess,
     DWORD dwFlags,
     LPWSTR lpExeName,
     PDWORD lpdwSize
    );
typedef enum _PROC_THREAD_ATTRIBUTE_NUM {
    ProcThreadAttributeParentProcess = 0,
    ProcThreadAttributeExtendedFlags,
    ProcThreadAttributeHandleList,
    ProcThreadAttributeMax
} PROC_THREAD_ATTRIBUTE_NUM;
typedef struct _PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST;

BOOL

InitializeProcThreadAttributeList(
     LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
     DWORD dwAttributeCount,
      DWORD dwFlags,
     PSIZE_T lpSize
    );

void

DeleteProcThreadAttributeList(
     LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList
    );

BOOL

UpdateProcThreadAttribute(
     LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
     DWORD dwFlags,
     DWORD_PTR Attribute,
     PVOID lpValue,
     SIZE_T cbSize,
     PVOID lpPreviousValue,
     PSIZE_T lpReturnSize
    );

BOOL

CreateProcessA(
        LPCSTR lpApplicationName,
     LPSTR lpCommandLine,
        LPSECURITY_ATTRIBUTES lpProcessAttributes,
        LPSECURITY_ATTRIBUTES lpThreadAttributes,
            BOOL bInheritHandles,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCSTR lpCurrentDirectory,
            LPSTARTUPINFOA lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
    );

BOOL

CreateProcessW(
        LPCWSTR lpApplicationName,
     LPWSTR lpCommandLine,
        LPSECURITY_ATTRIBUTES lpProcessAttributes,
        LPSECURITY_ATTRIBUTES lpThreadAttributes,
            BOOL bInheritHandles,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCWSTR lpCurrentDirectory,
            LPSTARTUPINFOW lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
    );

BOOL

SetProcessShutdownParameters(
     DWORD dwLevel,
     DWORD dwFlags
    );

BOOL

GetProcessShutdownParameters(
     LPDWORD lpdwLevel,
     LPDWORD lpdwFlags
    );

DWORD

GetProcessVersion(
     DWORD ProcessId
    );

void

FatalAppExitA(
     UINT uAction,
     LPCSTR lpMessageText
    );

void

FatalAppExitW(
     UINT uAction,
     LPCWSTR lpMessageText
    );

void

GetStartupInfoA(
     LPSTARTUPINFOA lpStartupInfo
    );

void

GetStartupInfoW(
     LPSTARTUPINFOW lpStartupInfo
    );

LPSTR

GetCommandLineA(
    void
    );

LPWSTR

GetCommandLineW(
    void
    );

DWORD

GetEnvironmentVariableA(
     LPCSTR lpName,
     LPSTR lpBuffer,
     DWORD nSize
    );

DWORD

GetEnvironmentVariableW(
     LPCWSTR lpName,
     LPWSTR lpBuffer,
     DWORD nSize
    );

BOOL

SetEnvironmentVariableA(
         LPCSTR lpName,
     LPCSTR lpValue
    );

BOOL

SetEnvironmentVariableW(
         LPCWSTR lpName,
     LPCWSTR lpValue
    );

DWORD

ExpandEnvironmentStringsA(
     LPCSTR lpSrc,
     LPSTR lpDst,
     DWORD nSize
    );

DWORD

ExpandEnvironmentStringsW(
     LPCWSTR lpSrc,
     LPWSTR lpDst,
     DWORD nSize
    );

DWORD

GetFirmwareEnvironmentVariableA(
     LPCSTR lpName,
     LPCSTR lpGuid,
     PVOID pBuffer,
     DWORD    nSize
    );

DWORD

GetFirmwareEnvironmentVariableW(
     LPCWSTR lpName,
     LPCWSTR lpGuid,
     PVOID pBuffer,
     DWORD    nSize
    );

BOOL

SetFirmwareEnvironmentVariableA(
     LPCSTR lpName,
     LPCSTR lpGuid,
     PVOID pValue,
     DWORD    nSize
    );

BOOL

SetFirmwareEnvironmentVariableW(
     LPCWSTR lpName,
     LPCWSTR lpGuid,
     PVOID pValue,
     DWORD    nSize
    );

void

OutputDebugStringA(
     LPCSTR lpOutputString
    );

void

OutputDebugStringW(
     LPCWSTR lpOutputString
    );

HRSRC

FindResourceA(
     HMODULE hModule,
         LPCSTR lpName,
         LPCSTR lpType
    );

HRSRC

FindResourceW(
     HMODULE hModule,
         LPCWSTR lpName,
         LPCWSTR lpType
    );

HRSRC

FindResourceExA(
     HMODULE hModule,
         LPCSTR lpType,
         LPCSTR lpName,
         WORD    wLanguage
    );

HRSRC

FindResourceExW(
     HMODULE hModule,
         LPCWSTR lpType,
         LPCWSTR lpName,
         WORD    wLanguage
    );
typedef BOOL (* ENUMRESTYPEPROCA)( HMODULE hModule,  LPSTR lpType,
 LONG_PTR lParam);
typedef BOOL (* ENUMRESTYPEPROCW)( HMODULE hModule,  LPWSTR lpType,
 LONG_PTR lParam);
typedef BOOL (* ENUMRESNAMEPROCA)( HMODULE hModule,  LPCSTR lpType,
 LPSTR lpName,  LONG_PTR lParam);
typedef BOOL (* ENUMRESNAMEPROCW)( HMODULE hModule,  LPCWSTR lpType,
 LPWSTR lpName,  LONG_PTR lParam);
typedef BOOL (* ENUMRESLANGPROCA)( HMODULE hModule,  LPCSTR lpType,
 LPCSTR lpName,  WORD  wLanguage,  LONG_PTR lParam);
typedef BOOL (* ENUMRESLANGPROCW)( HMODULE hModule,  LPCWSTR lpType,
 LPCWSTR lpName,  WORD  wLanguage,  LONG_PTR lParam);

BOOL

EnumResourceTypesA(
     HMODULE hModule,
         ENUMRESTYPEPROCA lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceTypesW(
     HMODULE hModule,
         ENUMRESTYPEPROCW lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceNamesA(
     HMODULE hModule,
         LPCSTR lpType,
         ENUMRESNAMEPROCA lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceNamesW(
     HMODULE hModule,
         LPCWSTR lpType,
         ENUMRESNAMEPROCW lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceLanguagesA(
     HMODULE hModule,
         LPCSTR lpType,
         LPCSTR lpName,
         ENUMRESLANGPROCA lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceLanguagesW(
     HMODULE hModule,
         LPCWSTR lpType,
         LPCWSTR lpName,
         ENUMRESLANGPROCW lpEnumFunc,
         LONG_PTR lParam
    );

BOOL

EnumResourceTypesExA(
     HMODULE hModule,
     ENUMRESTYPEPROCA lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

BOOL

EnumResourceTypesExW(
     HMODULE hModule,
     ENUMRESTYPEPROCW lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

BOOL

EnumResourceNamesExA(
     HMODULE hModule,
     LPCSTR lpType,
     ENUMRESNAMEPROCA lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

BOOL

EnumResourceNamesExW(
     HMODULE hModule,
     LPCWSTR lpType,
     ENUMRESNAMEPROCW lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

BOOL

EnumResourceLanguagesExA(
     HMODULE hModule,
     LPCSTR lpType,
     LPCSTR lpName,
     ENUMRESLANGPROCA lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

BOOL

EnumResourceLanguagesExW(
     HMODULE hModule,
     LPCWSTR lpType,
     LPCWSTR lpName,
     ENUMRESLANGPROCW lpEnumFunc,
     LONG_PTR lParam,
    DWORD dwFlags,
    LANGID LangId
    );

HANDLE

BeginUpdateResourceA(
     LPCSTR pFileName,
     BOOL bDeleteExistingResources
    );

HANDLE

BeginUpdateResourceW(
     LPCWSTR pFileName,
     BOOL bDeleteExistingResources
    );

BOOL

UpdateResourceA(
     HANDLE hUpdate,
     LPCSTR lpType,
     LPCSTR lpName,
     WORD wLanguage,
     LPVOID lpData,
     DWORD cb
    );

BOOL

UpdateResourceW(
     HANDLE hUpdate,
     LPCWSTR lpType,
     LPCWSTR lpName,
     WORD wLanguage,
     LPVOID lpData,
     DWORD cb
    );

BOOL

EndUpdateResourceA(
     HANDLE hUpdate,
     BOOL   fDiscard
    );

BOOL

EndUpdateResourceW(
     HANDLE hUpdate,
     BOOL   fDiscard
    );

ATOM

GlobalAddAtomA(
     LPCSTR lpString
    );

ATOM

GlobalAddAtomW(
     LPCWSTR lpString
    );

ATOM

GlobalFindAtomA(
     LPCSTR lpString
    );

ATOM

GlobalFindAtomW(
     LPCWSTR lpString
    );

UINT

GlobalGetAtomNameA(
     ATOM nAtom,
     LPSTR lpBuffer,
     int nSize
    );

UINT

GlobalGetAtomNameW(
     ATOM nAtom,
     LPWSTR lpBuffer,
     int nSize
    );

ATOM

AddAtomA(
     LPCSTR lpString
    );

ATOM

AddAtomW(
     LPCWSTR lpString
    );

ATOM

FindAtomA(
     LPCSTR lpString
    );

ATOM

FindAtomW(
     LPCWSTR lpString
    );

UINT

GetAtomNameA(
     ATOM nAtom,
     LPSTR lpBuffer,
     int nSize
    );

UINT

GetAtomNameW(
     ATOM nAtom,
     LPWSTR lpBuffer,
     int nSize
    );

UINT

GetProfileIntA(
     LPCSTR lpAppName,
     LPCSTR lpKeyName,
     INT nDefault
    );

UINT

GetProfileIntW(
     LPCWSTR lpAppName,
     LPCWSTR lpKeyName,
     INT nDefault
    );

DWORD

GetProfileStringA(
     LPCSTR lpAppName,
     LPCSTR lpKeyName,
     LPCSTR lpDefault,
     LPSTR lpReturnedString,
         DWORD nSize
    );

DWORD

GetProfileStringW(
     LPCWSTR lpAppName,
     LPCWSTR lpKeyName,
     LPCWSTR lpDefault,
     LPWSTR lpReturnedString,
         DWORD nSize
    );

BOOL

WriteProfileStringA(
     LPCSTR lpAppName,
     LPCSTR lpKeyName,
     LPCSTR lpString
    );

BOOL

WriteProfileStringW(
     LPCWSTR lpAppName,
     LPCWSTR lpKeyName,
     LPCWSTR lpString
    );

DWORD

GetProfileSectionA(
     LPCSTR lpAppName,
     LPSTR lpReturnedString,
     DWORD nSize
    );

DWORD

GetProfileSectionW(
     LPCWSTR lpAppName,
     LPWSTR lpReturnedString,
     DWORD nSize
    );

BOOL

WriteProfileSectionA(
     LPCSTR lpAppName,
     LPCSTR lpString
    );

BOOL

WriteProfileSectionW(
     LPCWSTR lpAppName,
     LPCWSTR lpString
    );

UINT

GetPrivateProfileIntA(
         LPCSTR lpAppName,
         LPCSTR lpKeyName,
         INT nDefault,
     LPCSTR lpFileName
    );

UINT

GetPrivateProfileIntW(
         LPCWSTR lpAppName,
         LPCWSTR lpKeyName,
         INT nDefault,
     LPCWSTR lpFileName
    );

DWORD

GetPrivateProfileStringA(
     LPCSTR lpAppName,
     LPCSTR lpKeyName,
     LPCSTR lpDefault,
     LPSTR lpReturnedString,
         DWORD nSize,
     LPCSTR lpFileName
    );

DWORD

GetPrivateProfileStringW(
     LPCWSTR lpAppName,
     LPCWSTR lpKeyName,
     LPCWSTR lpDefault,
     LPWSTR lpReturnedString,
         DWORD nSize,
     LPCWSTR lpFileName
    );

BOOL

WritePrivateProfileStringA(
     LPCSTR lpAppName,
     LPCSTR lpKeyName,
     LPCSTR lpString,
     LPCSTR lpFileName
    );

BOOL

WritePrivateProfileStringW(
     LPCWSTR lpAppName,
     LPCWSTR lpKeyName,
     LPCWSTR lpString,
     LPCWSTR lpFileName
    );

DWORD

GetPrivateProfileSectionA(
         LPCSTR lpAppName,
     LPSTR lpReturnedString,
         DWORD nSize,
     LPCSTR lpFileName
    );

DWORD

GetPrivateProfileSectionW(
         LPCWSTR lpAppName,
     LPWSTR lpReturnedString,
         DWORD nSize,
     LPCWSTR lpFileName
    );

BOOL

WritePrivateProfileSectionA(
         LPCSTR lpAppName,
         LPCSTR lpString,
     LPCSTR lpFileName
    );

BOOL

WritePrivateProfileSectionW(
         LPCWSTR lpAppName,
         LPCWSTR lpString,
     LPCWSTR lpFileName
    );

DWORD

GetPrivateProfileSectionNamesA(
     LPSTR lpszReturnBuffer,
         DWORD nSize,
     LPCSTR lpFileName
    );

DWORD

GetPrivateProfileSectionNamesW(
     LPWSTR lpszReturnBuffer,
         DWORD nSize,
     LPCWSTR lpFileName
    );

BOOL

GetPrivateProfileStructA(
         LPCSTR lpszSection,
         LPCSTR lpszKey,
     LPVOID   lpStruct,
         UINT     uSizeStruct,
     LPCSTR szFile
    );

BOOL

GetPrivateProfileStructW(
         LPCWSTR lpszSection,
         LPCWSTR lpszKey,
     LPVOID   lpStruct,
         UINT     uSizeStruct,
     LPCWSTR szFile
    );

BOOL

WritePrivateProfileStructA(
         LPCSTR lpszSection,
         LPCSTR lpszKey,
     LPVOID lpStruct,
         UINT     uSizeStruct,
     LPCSTR szFile
    );

BOOL

WritePrivateProfileStructW(
         LPCWSTR lpszSection,
         LPCWSTR lpszKey,
     LPVOID lpStruct,
         UINT     uSizeStruct,
     LPCWSTR szFile
    );

UINT

GetDriveTypeA(
     LPCSTR lpRootPathName
    );

UINT

GetDriveTypeW(
     LPCWSTR lpRootPathName
    );

UINT

GetSystemDirectoryA(
     LPSTR lpBuffer,
     UINT uSize
    );

UINT

GetSystemDirectoryW(
     LPWSTR lpBuffer,
     UINT uSize
    );

DWORD

GetTempPathA(
     DWORD nBufferLength,
     LPSTR lpBuffer
    );

DWORD

GetTempPathW(
     DWORD nBufferLength,
     LPWSTR lpBuffer
    );

UINT

GetTempFileNameA(
     LPCSTR lpPathName,
     LPCSTR lpPrefixString,
     UINT uUnique,
     LPSTR lpTempFileName
    );

UINT

GetTempFileNameW(
     LPCWSTR lpPathName,
     LPCWSTR lpPrefixString,
     UINT uUnique,
     LPWSTR lpTempFileName
    );

UINT

GetWindowsDirectoryA(
     LPSTR lpBuffer,
     UINT uSize
    );

UINT

GetWindowsDirectoryW(
     LPWSTR lpBuffer,
     UINT uSize
    );

UINT

GetSystemWindowsDirectoryA(
     LPSTR lpBuffer,
     UINT uSize
    );

UINT

GetSystemWindowsDirectoryW(
     LPWSTR lpBuffer,
     UINT uSize
    );

UINT

GetSystemWow64DirectoryA(
     LPSTR lpBuffer,
     UINT uSize
    );

UINT

GetSystemWow64DirectoryW(
     LPWSTR lpBuffer,
     UINT uSize
    );

BOOLEAN

Wow64EnableWow64FsRedirection (
     BOOLEAN Wow64FsEnableRedirection
    );

BOOL

Wow64DisableWow64FsRedirection (
     PVOID *OldValue
    );

BOOL

Wow64RevertWow64FsRedirection (
     PVOID OlValue
    );
typedef UINT (* PGET_SYSTEM_WOW64_DIRECTORY_A)( LPSTR lpBuffer,  UINT uSize);
typedef UINT (* PGET_SYSTEM_WOW64_DIRECTORY_W)( LPWSTR lpBuffer,  UINT uSize);

BOOL

SetCurrentDirectoryA(
     LPCSTR lpPathName
    );

BOOL

SetCurrentDirectoryW(
     LPCWSTR lpPathName
    );

DWORD

GetCurrentDirectoryA(
     DWORD nBufferLength,
     LPSTR lpBuffer
    );

DWORD

GetCurrentDirectoryW(
     DWORD nBufferLength,
     LPWSTR lpBuffer
    );

BOOL

SetDllDirectoryA(
     LPCSTR lpPathName
    );

BOOL

SetDllDirectoryW(
     LPCWSTR lpPathName
    );

DWORD

GetDllDirectoryA(
     DWORD nBufferLength,
     LPSTR lpBuffer
    );

DWORD

GetDllDirectoryW(
     DWORD nBufferLength,
     LPWSTR lpBuffer
    );

BOOL

GetDiskFreeSpaceA(
      LPCSTR lpRootPathName,
     LPDWORD lpSectorsPerCluster,
     LPDWORD lpBytesPerSector,
     LPDWORD lpNumberOfFreeClusters,
     LPDWORD lpTotalNumberOfClusters
    );

BOOL

GetDiskFreeSpaceW(
      LPCWSTR lpRootPathName,
     LPDWORD lpSectorsPerCluster,
     LPDWORD lpBytesPerSector,
     LPDWORD lpNumberOfFreeClusters,
     LPDWORD lpTotalNumberOfClusters
    );

BOOL

GetDiskFreeSpaceExA(
      LPCSTR lpDirectoryName,
     PULARGE_INTEGER lpFreeBytesAvailableToCaller,
     PULARGE_INTEGER lpTotalNumberOfBytes,
     PULARGE_INTEGER lpTotalNumberOfFreeBytes
    );

BOOL

GetDiskFreeSpaceExW(
      LPCWSTR lpDirectoryName,
     PULARGE_INTEGER lpFreeBytesAvailableToCaller,
     PULARGE_INTEGER lpTotalNumberOfBytes,
     PULARGE_INTEGER lpTotalNumberOfFreeBytes
    );

BOOL

CreateDirectoryA(
         LPCSTR lpPathName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateDirectoryW(
         LPCWSTR lpPathName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateDirectoryExA(
         LPCSTR lpTemplateDirectory,
         LPCSTR lpNewDirectory,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateDirectoryExW(
         LPCWSTR lpTemplateDirectory,
         LPCWSTR lpNewDirectory,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateDirectoryTransactedA(
         LPCSTR lpTemplateDirectory,
         LPCSTR lpNewDirectory,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         HANDLE hTransaction
    );

BOOL

CreateDirectoryTransactedW(
         LPCWSTR lpTemplateDirectory,
         LPCWSTR lpNewDirectory,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         HANDLE hTransaction
    );

BOOL

RemoveDirectoryA(
     LPCSTR lpPathName
    );

BOOL

RemoveDirectoryW(
     LPCWSTR lpPathName
    );

BOOL

RemoveDirectoryTransactedA(
     LPCSTR lpPathName,
         HANDLE hTransaction
    );

BOOL

RemoveDirectoryTransactedW(
     LPCWSTR lpPathName,
         HANDLE hTransaction
    );

DWORD

GetFullPathNameA(
                LPCSTR lpFileName,
                DWORD nBufferLength,
     LPSTR lpBuffer,
     LPSTR *lpFilePart
    );

DWORD

GetFullPathNameW(
                LPCWSTR lpFileName,
                DWORD nBufferLength,
     LPWSTR lpBuffer,
     LPWSTR *lpFilePart
    );

DWORD

GetFullPathNameTransactedA(
                LPCSTR lpFileName,
                DWORD nBufferLength,
     LPSTR lpBuffer,
     LPSTR *lpFilePart,
                HANDLE hTransaction
    );

DWORD

GetFullPathNameTransactedW(
                LPCWSTR lpFileName,
                DWORD nBufferLength,
     LPWSTR lpBuffer,
     LPWSTR *lpFilePart,
                HANDLE hTransaction
    );

BOOL

DefineDosDeviceA(
         DWORD dwFlags,
         LPCSTR lpDeviceName,
     LPCSTR lpTargetPath
    );

BOOL

DefineDosDeviceW(
         DWORD dwFlags,
         LPCWSTR lpDeviceName,
     LPCWSTR lpTargetPath
    );

DWORD

QueryDosDeviceA(
     LPCSTR lpDeviceName,
     LPSTR lpTargetPath,
         DWORD ucchMax
    );

DWORD

QueryDosDeviceW(
     LPCWSTR lpDeviceName,
     LPWSTR lpTargetPath,
         DWORD ucchMax
    );

HANDLE

CreateFileA(
         LPCSTR lpFileName,
         DWORD dwDesiredAccess,
         DWORD dwShareMode,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         DWORD dwCreationDisposition,
         DWORD dwFlagsAndAttributes,
     HANDLE hTemplateFile
    );

HANDLE

CreateFileW(
         LPCWSTR lpFileName,
         DWORD dwDesiredAccess,
         DWORD dwShareMode,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         DWORD dwCreationDisposition,
         DWORD dwFlagsAndAttributes,
     HANDLE hTemplateFile
    );

HANDLE

CreateFileTransactedA(
           LPCSTR lpFileName,
           DWORD dwDesiredAccess,
           DWORD dwShareMode,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes,
           DWORD dwCreationDisposition,
           DWORD dwFlagsAndAttributes,
       HANDLE hTemplateFile,
           HANDLE hTransaction,
       PUSHORT pusMiniVersion,
     PVOID  lpExtendedParameter
    );

HANDLE

CreateFileTransactedW(
           LPCWSTR lpFileName,
           DWORD dwDesiredAccess,
           DWORD dwShareMode,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes,
           DWORD dwCreationDisposition,
           DWORD dwFlagsAndAttributes,
       HANDLE hTemplateFile,
           HANDLE hTransaction,
       PUSHORT pusMiniVersion,
     PVOID  lpExtendedParameter
    );

HANDLE

ReOpenFile(
     HANDLE  hOriginalFile,
     DWORD   dwDesiredAccess,
     DWORD   dwShareMode,
     DWORD   dwFlagsAndAttributes
    );

BOOL

SetFileAttributesA(
     LPCSTR lpFileName,
     DWORD dwFileAttributes
    );

BOOL

SetFileAttributesW(
     LPCWSTR lpFileName,
     DWORD dwFileAttributes
    );

DWORD

GetFileAttributesA(
     LPCSTR lpFileName
    );

DWORD

GetFileAttributesW(
     LPCWSTR lpFileName
    );

BOOL

SetFileAttributesTransactedA(
         LPCSTR lpFileName,
         DWORD dwFileAttributes,
         HANDLE hTransaction
    );

BOOL

SetFileAttributesTransactedW(
         LPCWSTR lpFileName,
         DWORD dwFileAttributes,
         HANDLE hTransaction
    );
typedef enum _GET_FILEEX_INFO_LEVELS {
    GetFileExInfoStandard,
    GetFileExMaxInfoLevel
} GET_FILEEX_INFO_LEVELS;

BOOL

GetFileAttributesTransactedA(
      LPCSTR lpFileName,
      GET_FILEEX_INFO_LEVELS fInfoLevelId,
     LPVOID lpFileInformation,
         HANDLE hTransaction
    );

BOOL

GetFileAttributesTransactedW(
      LPCWSTR lpFileName,
      GET_FILEEX_INFO_LEVELS fInfoLevelId,
     LPVOID lpFileInformation,
         HANDLE hTransaction
    );

BOOL

GetFileAttributesExA(
      LPCSTR lpFileName,
      GET_FILEEX_INFO_LEVELS fInfoLevelId,
     LPVOID lpFileInformation
    );

BOOL

GetFileAttributesExW(
      LPCWSTR lpFileName,
      GET_FILEEX_INFO_LEVELS fInfoLevelId,
     LPVOID lpFileInformation
    );

DWORD

GetCompressedFileSizeA(
      LPCSTR lpFileName,
     LPDWORD  lpFileSizeHigh
    );

DWORD

GetCompressedFileSizeW(
      LPCWSTR lpFileName,
     LPDWORD  lpFileSizeHigh
    );

DWORD

GetCompressedFileSizeTransactedA(
          LPCSTR lpFileName,
     LPDWORD  lpFileSizeHigh,
          HANDLE hTransaction
    );

DWORD

GetCompressedFileSizeTransactedW(
          LPCWSTR lpFileName,
     LPDWORD  lpFileSizeHigh,
          HANDLE hTransaction
    );

BOOL

DeleteFileA(
     LPCSTR lpFileName
    );

BOOL

DeleteFileW(
     LPCWSTR lpFileName
    );

BOOL

DeleteFileTransactedA(
         LPCSTR lpFileName,
         HANDLE hTransaction
    );

BOOL

DeleteFileTransactedW(
         LPCWSTR lpFileName,
         HANDLE hTransaction
    );

BOOL

CheckNameLegalDOS8Dot3A(
          LPCSTR lpName,
     LPSTR lpOemName,
          DWORD OemNameSize,
     PBOOL pbNameContainsSpaces ,
         PBOOL pbNameLegal
    );

BOOL

CheckNameLegalDOS8Dot3W(
          LPCWSTR lpName,
     LPSTR lpOemName,
          DWORD OemNameSize,
     PBOOL pbNameContainsSpaces ,
         PBOOL pbNameLegal
    );
typedef enum _FINDEX_INFO_LEVELS {
    FindExInfoStandard,
    FindExInfoMaxInfoLevel
} FINDEX_INFO_LEVELS;
typedef enum _FINDEX_SEARCH_OPS {
    FindExSearchNameMatch,
    FindExSearchLimitToDirectories,
    FindExSearchLimitToDevices,
    FindExSearchMaxSearchOp
} FINDEX_SEARCH_OPS;

HANDLE

FindFirstFileExA(
           LPCSTR lpFileName,
           FINDEX_INFO_LEVELS fInfoLevelId,
          LPVOID lpFindFileData,
           FINDEX_SEARCH_OPS fSearchOp,
     LPVOID lpSearchFilter,
           DWORD dwAdditionalFlags
    );

HANDLE

FindFirstFileExW(
           LPCWSTR lpFileName,
           FINDEX_INFO_LEVELS fInfoLevelId,
          LPVOID lpFindFileData,
           FINDEX_SEARCH_OPS fSearchOp,
     LPVOID lpSearchFilter,
           DWORD dwAdditionalFlags
    );

HANDLE

FindFirstFileTransactedA(
           LPCSTR lpFileName,
           FINDEX_INFO_LEVELS fInfoLevelId,
          LPVOID lpFindFileData,
           FINDEX_SEARCH_OPS fSearchOp,
     LPVOID lpSearchFilter,
           DWORD dwAdditionalFlags,
           HANDLE hTransaction
    );

HANDLE

FindFirstFileTransactedW(
           LPCWSTR lpFileName,
           FINDEX_INFO_LEVELS fInfoLevelId,
          LPVOID lpFindFileData,
           FINDEX_SEARCH_OPS fSearchOp,
     LPVOID lpSearchFilter,
           DWORD dwAdditionalFlags,
           HANDLE hTransaction
    );

HANDLE

FindFirstFileA(
      LPCSTR lpFileName,
     LPWIN32_FIND_DATAA lpFindFileData
    );

HANDLE

FindFirstFileW(
      LPCWSTR lpFileName,
     LPWIN32_FIND_DATAW lpFindFileData
    );

BOOL

FindNextFileA(
      HANDLE hFindFile,
     LPWIN32_FIND_DATAA lpFindFileData
    );

BOOL

FindNextFileW(
      HANDLE hFindFile,
     LPWIN32_FIND_DATAW lpFindFileData
    );

DWORD

SearchPathA(
      LPCSTR lpPath,
          LPCSTR lpFileName,
      LPCSTR lpExtension,
          DWORD nBufferLength,
     LPSTR lpBuffer,
     LPSTR *lpFilePart
    );

DWORD

SearchPathW(
      LPCWSTR lpPath,
          LPCWSTR lpFileName,
      LPCWSTR lpExtension,
          DWORD nBufferLength,
     LPWSTR lpBuffer,
     LPWSTR *lpFilePart
    );

BOOL

CopyFileA(
     LPCSTR lpExistingFileName,
     LPCSTR lpNewFileName,
     BOOL bFailIfExists
    );

BOOL

CopyFileW(
     LPCWSTR lpExistingFileName,
     LPCWSTR lpNewFileName,
     BOOL bFailIfExists
    );
typedef
DWORD
( *LPPROGRESS_ROUTINE)(
         LARGE_INTEGER TotalFileSize,
         LARGE_INTEGER TotalBytesTransferred,
         LARGE_INTEGER StreamSize,
         LARGE_INTEGER StreamBytesTransferred,
         DWORD dwStreamNumber,
         DWORD dwCallbackReason,
         HANDLE hSourceFile,
         HANDLE hDestinationFile,
     LPVOID lpData
    );

BOOL

CopyFileExA(
         LPCSTR lpExistingFileName,
         LPCSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
     LPBOOL pbCancel,
         DWORD dwCopyFlags
    );

BOOL

CopyFileExW(
         LPCWSTR lpExistingFileName,
         LPCWSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
     LPBOOL pbCancel,
         DWORD dwCopyFlags
    );

BOOL

CopyFileTransactedA(
         LPCSTR lpExistingFileName,
         LPCSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
     LPBOOL pbCancel,
         DWORD dwCopyFlags,
         HANDLE hTransaction
    );

BOOL

CopyFileTransactedW(
         LPCWSTR lpExistingFileName,
         LPCWSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
     LPBOOL pbCancel,
         DWORD dwCopyFlags,
         HANDLE hTransaction
    );

BOOL

MoveFileA(
     LPCSTR lpExistingFileName,
     LPCSTR lpNewFileName
    );

BOOL

MoveFileW(
     LPCWSTR lpExistingFileName,
     LPCWSTR lpNewFileName
    );

BOOL

MoveFileExA(
         LPCSTR lpExistingFileName,
     LPCSTR lpNewFileName,
         DWORD    dwFlags
    );

BOOL

MoveFileExW(
         LPCWSTR lpExistingFileName,
     LPCWSTR lpNewFileName,
         DWORD    dwFlags
    );

BOOL

MoveFileWithProgressA(
         LPCSTR lpExistingFileName,
     LPCSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
         DWORD dwFlags
    );

BOOL

MoveFileWithProgressW(
         LPCWSTR lpExistingFileName,
     LPCWSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
         DWORD dwFlags
    );

BOOL

MoveFileTransactedA(
         LPCSTR lpExistingFileName,
     LPCSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
         DWORD dwFlags,
         HANDLE hTransaction
    );

BOOL

MoveFileTransactedW(
         LPCWSTR lpExistingFileName,
     LPCWSTR lpNewFileName,
     LPPROGRESS_ROUTINE lpProgressRoutine,
     LPVOID lpData,
         DWORD dwFlags,
         HANDLE hTransaction
    );

BOOL

ReplaceFileA(
           LPCSTR  lpReplacedFileName,
           LPCSTR  lpReplacementFileName,
       LPCSTR  lpBackupFileName,
           DWORD   dwReplaceFlags,
     LPVOID  lpExclude,
     LPVOID  lpReserved
    );

BOOL

ReplaceFileW(
           LPCWSTR lpReplacedFileName,
           LPCWSTR lpReplacementFileName,
       LPCWSTR lpBackupFileName,
           DWORD   dwReplaceFlags,
     LPVOID  lpExclude,
     LPVOID  lpReserved
    );

BOOL

CreateHardLinkA(
           LPCSTR lpFileName,
           LPCSTR lpExistingFileName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateHardLinkW(
           LPCWSTR lpFileName,
           LPCWSTR lpExistingFileName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

CreateHardLinkTransactedA(
           LPCSTR lpFileName,
           LPCSTR lpExistingFileName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
           HANDLE hTransaction
    );

BOOL

CreateHardLinkTransactedW(
           LPCWSTR lpFileName,
           LPCWSTR lpExistingFileName,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
           HANDLE hTransaction
    );
typedef enum _STREAM_INFO_LEVELS {
    FindStreamInfoStandard,
    FindStreamInfoMaxInfoLevel
} STREAM_INFO_LEVELS;
typedef struct _WIN32_FIND_STREAM_DATA {
    LARGE_INTEGER StreamSize;
    WCHAR cStreamName[ 260 + 36 ];
} WIN32_FIND_STREAM_DATA, *PWIN32_FIND_STREAM_DATA;
HANDLE

FindFirstStreamW(
           LPCWSTR lpFileName,
           STREAM_INFO_LEVELS InfoLevel,
          LPVOID lpFindStreamData,
     DWORD dwFlags
    );
BOOL

FindNextStreamW(
      HANDLE hFindStream,
     LPVOID lpFindStreamData
    );
HANDLE

FindFirstFileNameW (
        LPCWSTR lpFileName,
        DWORD dwFlags,
     LPDWORD StringLength,
     PWCHAR LinkName
    );
BOOL

FindNextFileNameW (
        HANDLE hFindStream,
     LPDWORD StringLength,
     PWCHAR LinkName
    );
HANDLE

FindFirstFileNameTransactedW (
         LPCWSTR lpFileName,
         DWORD dwFlags,
      LPDWORD StringLength,
     PWCHAR LinkName,
     HANDLE hTransaction
    );

HANDLE

CreateNamedPipeA(
         LPCSTR lpName,
         DWORD dwOpenMode,
         DWORD dwPipeMode,
         DWORD nMaxInstances,
         DWORD nOutBufferSize,
         DWORD nInBufferSize,
         DWORD nDefaultTimeOut,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

HANDLE

CreateNamedPipeW(
         LPCWSTR lpName,
         DWORD dwOpenMode,
         DWORD dwPipeMode,
         DWORD nMaxInstances,
         DWORD nOutBufferSize,
         DWORD nInBufferSize,
         DWORD nDefaultTimeOut,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

BOOL

GetNamedPipeHandleStateA(
          HANDLE hNamedPipe,
     LPDWORD lpState,
     LPDWORD lpCurInstances,
     LPDWORD lpMaxCollectionCount,
     LPDWORD lpCollectDataTimeout,
     LPSTR lpUserName,
          DWORD nMaxUserNameSize
    );

BOOL

GetNamedPipeHandleStateW(
          HANDLE hNamedPipe,
     LPDWORD lpState,
     LPDWORD lpCurInstances,
     LPDWORD lpMaxCollectionCount,
     LPDWORD lpCollectDataTimeout,
     LPWSTR lpUserName,
          DWORD nMaxUserNameSize
    );

BOOL

CallNamedPipeA(
      LPCSTR lpNamedPipeName,
     LPVOID lpInBuffer,
      DWORD nInBufferSize,
     LPVOID lpOutBuffer,
      DWORD nOutBufferSize,
     LPDWORD lpBytesRead,
      DWORD nTimeOut
    );

BOOL

CallNamedPipeW(
      LPCWSTR lpNamedPipeName,
     LPVOID lpInBuffer,
      DWORD nInBufferSize,
     LPVOID lpOutBuffer,
      DWORD nOutBufferSize,
     LPDWORD lpBytesRead,
      DWORD nTimeOut
    );

BOOL

WaitNamedPipeA(
     LPCSTR lpNamedPipeName,
     DWORD nTimeOut
    );

BOOL

WaitNamedPipeW(
     LPCWSTR lpNamedPipeName,
     DWORD nTimeOut
    );
typedef enum {
    PipeAttribute,
    PipeConnectionAttribute,
    PipeHandleAttribute
} PIPE_ATTRIBUTE_TYPE;

BOOL

GetNamedPipeAttribute(
     HANDLE Pipe,
     PIPE_ATTRIBUTE_TYPE AttributeType,
     PSTR AttributeName,
     PVOID AttributeValue,
     PSIZE_T AttributeValueLength
    );

BOOL

SetNamedPipeAttribute(
     HANDLE Pipe,
     PIPE_ATTRIBUTE_TYPE AttributeType,
     PSTR AttributeName,
     PVOID AttributeValue,
     SIZE_T AttributeValueLength
    );

BOOL

GetNamedPipeClientComputerNameA(
     HANDLE Pipe,
      LPSTR ClientComputerName,
     ULONG ClientComputerNameLength
    );

BOOL

GetNamedPipeClientComputerNameW(
     HANDLE Pipe,
      LPWSTR ClientComputerName,
     ULONG ClientComputerNameLength
    );

BOOL

GetNamedPipeClientProcessId(
     HANDLE Pipe,
     PULONG ClientProcessId
    );

BOOL

GetNamedPipeClientSessionId(
     HANDLE Pipe,
     PULONG ClientSessionId
    );

BOOL

GetNamedPipeServerProcessId(
     HANDLE Pipe,
     PULONG ServerProcessId
    );

BOOL

GetNamedPipeServerSessionId(
     HANDLE Pipe,
     PULONG ServerSessionId
    );

BOOL

SetVolumeLabelA(
     LPCSTR lpRootPathName,
     LPCSTR lpVolumeName
    );

BOOL

SetVolumeLabelW(
     LPCWSTR lpRootPathName,
     LPCWSTR lpVolumeName
    );

void

SetFileApisToOEM( void );

void

SetFileApisToANSI( void );

BOOL

AreFileApisANSI( void );

BOOL

GetVolumeInformationA(
      LPCSTR lpRootPathName,
     LPSTR lpVolumeNameBuffer,
          DWORD nVolumeNameSize,
     LPDWORD lpVolumeSerialNumber,
     LPDWORD lpMaximumComponentLength,
     LPDWORD lpFileSystemFlags,
     LPSTR lpFileSystemNameBuffer,
          DWORD nFileSystemNameSize
    );

BOOL

GetVolumeInformationW(
      LPCWSTR lpRootPathName,
     LPWSTR lpVolumeNameBuffer,
          DWORD nVolumeNameSize,
     LPDWORD lpVolumeSerialNumber,
     LPDWORD lpMaximumComponentLength,
     LPDWORD lpFileSystemFlags,
     LPWSTR lpFileSystemNameBuffer,
          DWORD nFileSystemNameSize
    );

BOOL

GetVolumeInformationByHandleW(
          HANDLE hFile,
     LPWSTR lpVolumeNameBuffer,
          DWORD nVolumeNameSize,
     LPDWORD lpVolumeSerialNumber,
     LPDWORD lpMaximumComponentLength,
     LPDWORD lpFileSystemFlags,
     LPWSTR lpFileSystemNameBuffer,
          DWORD nFileSystemNameSize
    );

BOOL

CancelSynchronousIo(
     HANDLE hThread
    );

BOOL

CancelIoEx(
     HANDLE hFile,
     LPOVERLAPPED lpOverlapped
    );

BOOL

CancelIo(
     HANDLE hFile
    );

BOOL

SetFileBandwidthReservation(
      HANDLE  hFile,
      DWORD   nPeriodMilliseconds,
      DWORD   nBytesPerPeriod,
      BOOL    bDiscardable,
     LPDWORD lpTransferSize,
     LPDWORD lpNumOutstandingRequests
    );

BOOL

GetFileBandwidthReservation(
      HANDLE  hFile,
     LPDWORD lpPeriodMilliseconds,
     LPDWORD lpBytesPerPeriod,
     LPBOOL  pDiscardable,
     LPDWORD lpTransferSize,
     LPDWORD lpNumOutstandingRequests
    );

BOOL

ClearEventLogA (
         HANDLE hEventLog,
     LPCSTR lpBackupFileName
    );

BOOL

ClearEventLogW (
         HANDLE hEventLog,
     LPCWSTR lpBackupFileName
    );

BOOL

BackupEventLogA (
     HANDLE hEventLog,
     LPCSTR lpBackupFileName
    );

BOOL

BackupEventLogW (
     HANDLE hEventLog,
     LPCWSTR lpBackupFileName
    );

BOOL

CloseEventLog (
     HANDLE hEventLog
    );

BOOL

DeregisterEventSource (
     HANDLE hEventLog
    );

BOOL

NotifyChangeEventLog(
     HANDLE  hEventLog,
     HANDLE  hEvent
    );

BOOL

GetNumberOfEventLogRecords (
      HANDLE hEventLog,
     PDWORD NumberOfRecords
    );

BOOL

GetOldestEventLogRecord (
      HANDLE hEventLog,
     PDWORD OldestRecord
    );

HANDLE

OpenEventLogA (
     LPCSTR lpUNCServerName,
         LPCSTR lpSourceName
    );

HANDLE

OpenEventLogW (
     LPCWSTR lpUNCServerName,
         LPCWSTR lpSourceName
    );

HANDLE

RegisterEventSourceA (
     LPCSTR lpUNCServerName,
         LPCSTR lpSourceName
    );

HANDLE

RegisterEventSourceW (
     LPCWSTR lpUNCServerName,
         LPCWSTR lpSourceName
    );

HANDLE

OpenBackupEventLogA (
     LPCSTR lpUNCServerName,
         LPCSTR lpFileName
    );

HANDLE

OpenBackupEventLogW (
     LPCWSTR lpUNCServerName,
         LPCWSTR lpFileName
    );

BOOL

ReadEventLogA (
      HANDLE     hEventLog,
      DWORD      dwReadFlags,
      DWORD      dwRecordOffset,
     LPVOID     lpBuffer,
      DWORD      nNumberOfBytesToRead,
     DWORD      *pnBytesRead,
     DWORD      *pnMinNumberOfBytesNeeded
    );

BOOL

ReadEventLogW (
      HANDLE     hEventLog,
      DWORD      dwReadFlags,
      DWORD      dwRecordOffset,
     LPVOID     lpBuffer,
      DWORD      nNumberOfBytesToRead,
     DWORD      *pnBytesRead,
     DWORD      *pnMinNumberOfBytesNeeded
    );

BOOL

ReportEventA (
         HANDLE     hEventLog,
         WORD       wType,
         WORD       wCategory,
         DWORD      dwEventID,
     PSID       lpUserSid,
         WORD       wNumStrings,
         DWORD      dwDataSize,
     LPCSTR *lpStrings,
     LPVOID lpRawData
    );

BOOL

ReportEventW (
         HANDLE     hEventLog,
         WORD       wType,
         WORD       wCategory,
         DWORD      dwEventID,
     PSID       lpUserSid,
         WORD       wNumStrings,
         DWORD      dwDataSize,
     LPCWSTR *lpStrings,
     LPVOID lpRawData
    );
typedef struct _EVENTLOG_FULL_INFORMATION
{
    DWORD    dwFull;
}
EVENTLOG_FULL_INFORMATION, *LPEVENTLOG_FULL_INFORMATION;

BOOL

GetEventLogInformation (
      HANDLE     hEventLog,
      DWORD      dwInfoLevel,
     LPVOID lpBuffer,
      DWORD      cbBufSize,
     LPDWORD    pcbBytesNeeded
    );

BOOL

DuplicateToken(
            HANDLE ExistingTokenHandle,
            SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
     PHANDLE DuplicateTokenHandle
    );

BOOL

GetKernelObjectSecurity (
      HANDLE Handle,
      SECURITY_INFORMATION RequestedInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
      DWORD nLength,
     LPDWORD lpnLengthNeeded
    );

BOOL

ImpersonateNamedPipeClient(
     HANDLE hNamedPipe
    );

BOOL

ImpersonateSelf(
     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
    );

BOOL

RevertToSelf (
    void
    );

BOOL

SetThreadToken (
     PHANDLE Thread,
     HANDLE Token
    );

BOOL

AccessCheck (
        PSECURITY_DESCRIPTOR pSecurityDescriptor,
        HANDLE ClientToken,
        DWORD DesiredAccess,
        PGENERIC_MAPPING GenericMapping,
     PPRIVILEGE_SET PrivilegeSet,
     LPDWORD PrivilegeSetLength,
       LPDWORD GrantedAccess,
       LPBOOL AccessStatus
    );

BOOL

AccessCheckByType (
         PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID PrincipalSelfSid,
         HANDLE ClientToken,
         DWORD DesiredAccess,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
     PPRIVILEGE_SET PrivilegeSet,
      LPDWORD PrivilegeSetLength,
        LPDWORD GrantedAccess,
        LPBOOL AccessStatus
    );

BOOL

AccessCheckByTypeResultList (
         PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID PrincipalSelfSid,
         HANDLE ClientToken,
         DWORD DesiredAccess,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
     PPRIVILEGE_SET PrivilegeSet,
      LPDWORD PrivilegeSetLength,
        LPDWORD GrantedAccessList,
        LPDWORD AccessStatusList
    );

BOOL

OpenProcessToken (
            HANDLE ProcessHandle,
            DWORD DesiredAccess,
     PHANDLE TokenHandle
    );

BOOL

OpenThreadToken (
            HANDLE ThreadHandle,
            DWORD DesiredAccess,
            BOOL OpenAsSelf,
     PHANDLE TokenHandle
    );

BOOL

GetTokenInformation (
          HANDLE TokenHandle,
          TOKEN_INFORMATION_CLASS TokenInformationClass,
     LPVOID TokenInformation,
          DWORD TokenInformationLength,
         PDWORD ReturnLength
    );

BOOL

SetTokenInformation (
     HANDLE TokenHandle,
     TOKEN_INFORMATION_CLASS TokenInformationClass,
     LPVOID TokenInformation,
     DWORD TokenInformationLength
    );

BOOL

AdjustTokenPrivileges (
          HANDLE TokenHandle,
          BOOL DisableAllPrivileges,
      PTOKEN_PRIVILEGES NewState,
          DWORD BufferLength,
     PTOKEN_PRIVILEGES PreviousState,
     PDWORD ReturnLength
    );

BOOL

AdjustTokenGroups (
          HANDLE TokenHandle,
          BOOL ResetToDefault,
      PTOKEN_GROUPS NewState,
          DWORD BufferLength,
     PTOKEN_GROUPS PreviousState,
     PDWORD ReturnLength
    );

BOOL

PrivilegeCheck (
        HANDLE ClientToken,
     PPRIVILEGE_SET RequiredPrivileges,
       LPBOOL pfResult
    );

BOOL

AccessCheckAndAuditAlarmA (
         LPCSTR SubsystemName,
     LPVOID HandleId,
         LPSTR ObjectTypeName,
     LPSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
         DWORD DesiredAccess,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPBOOL AccessStatus,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckAndAuditAlarmW (
         LPCWSTR SubsystemName,
     LPVOID HandleId,
         LPWSTR ObjectTypeName,
     LPWSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
         DWORD DesiredAccess,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPBOOL AccessStatus,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeAndAuditAlarmA (
         LPCSTR SubsystemName,
         LPVOID HandleId,
         LPCSTR ObjectTypeName,
     LPCSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPBOOL AccessStatus,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeAndAuditAlarmW (
         LPCWSTR SubsystemName,
         LPVOID HandleId,
         LPCWSTR ObjectTypeName,
     LPCWSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPBOOL AccessStatus,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeResultListAndAuditAlarmA (
         LPCSTR SubsystemName,
         LPVOID HandleId,
         LPCSTR ObjectTypeName,
     LPCSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPDWORD AccessStatusList,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeResultListAndAuditAlarmW (
         LPCWSTR SubsystemName,
         LPVOID HandleId,
         LPCWSTR ObjectTypeName,
     LPCWSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPDWORD AccessStatusList,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeResultListAndAuditAlarmByHandleA (
         LPCSTR SubsystemName,
         LPVOID HandleId,
         HANDLE ClientToken,
         LPCSTR ObjectTypeName,
     LPCSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPDWORD AccessStatusList,
        LPBOOL pfGenerateOnClose
    );

BOOL

AccessCheckByTypeResultListAndAuditAlarmByHandleW (
         LPCWSTR SubsystemName,
         LPVOID HandleId,
         HANDLE ClientToken,
         LPCWSTR ObjectTypeName,
     LPCWSTR ObjectName,
         PSECURITY_DESCRIPTOR SecurityDescriptor,
     PSID PrincipalSelfSid,
         DWORD DesiredAccess,
         AUDIT_EVENT_TYPE AuditType,
         DWORD Flags,
     POBJECT_TYPE_LIST ObjectTypeList,
         DWORD ObjectTypeListLength,
         PGENERIC_MAPPING GenericMapping,
         BOOL ObjectCreation,
        LPDWORD GrantedAccess,
        LPDWORD AccessStatusList,
        LPBOOL pfGenerateOnClose
    );

BOOL

ObjectOpenAuditAlarmA (
         LPCSTR SubsystemName,
         LPVOID HandleId,
         LPSTR ObjectTypeName,
     LPSTR ObjectName,
         PSECURITY_DESCRIPTOR pSecurityDescriptor,
         HANDLE ClientToken,
         DWORD DesiredAccess,
         DWORD GrantedAccess,
     PPRIVILEGE_SET Privileges,
         BOOL ObjectCreation,
         BOOL AccessGranted,
        LPBOOL GenerateOnClose
    );

BOOL

ObjectOpenAuditAlarmW (
         LPCWSTR SubsystemName,
         LPVOID HandleId,
         LPWSTR ObjectTypeName,
     LPWSTR ObjectName,
         PSECURITY_DESCRIPTOR pSecurityDescriptor,
         HANDLE ClientToken,
         DWORD DesiredAccess,
         DWORD GrantedAccess,
     PPRIVILEGE_SET Privileges,
         BOOL ObjectCreation,
         BOOL AccessGranted,
        LPBOOL GenerateOnClose
    );

BOOL

ObjectPrivilegeAuditAlarmA (
     LPCSTR SubsystemName,
     LPVOID HandleId,
     HANDLE ClientToken,
     DWORD DesiredAccess,
     PPRIVILEGE_SET Privileges,
     BOOL AccessGranted
    );

BOOL

ObjectPrivilegeAuditAlarmW (
     LPCWSTR SubsystemName,
     LPVOID HandleId,
     HANDLE ClientToken,
     DWORD DesiredAccess,
     PPRIVILEGE_SET Privileges,
     BOOL AccessGranted
    );

BOOL

ObjectCloseAuditAlarmA (
     LPCSTR SubsystemName,
     LPVOID HandleId,
     BOOL GenerateOnClose
    );

BOOL

ObjectCloseAuditAlarmW (
     LPCWSTR SubsystemName,
     LPVOID HandleId,
     BOOL GenerateOnClose
    );

BOOL

ObjectDeleteAuditAlarmA (
     LPCSTR SubsystemName,
     LPVOID HandleId,
     BOOL GenerateOnClose
    );

BOOL

ObjectDeleteAuditAlarmW (
     LPCWSTR SubsystemName,
     LPVOID HandleId,
     BOOL GenerateOnClose
    );

BOOL

PrivilegedServiceAuditAlarmA (
     LPCSTR SubsystemName,
     LPCSTR ServiceName,
     HANDLE ClientToken,
     PPRIVILEGE_SET Privileges,
     BOOL AccessGranted
    );

BOOL

PrivilegedServiceAuditAlarmW (
     LPCWSTR SubsystemName,
     LPCWSTR ServiceName,
     HANDLE ClientToken,
     PPRIVILEGE_SET Privileges,
     BOOL AccessGranted
    );

BOOL

IsWellKnownSid (
     PSID pSid,
     WELL_KNOWN_SID_TYPE WellKnownSidType
    );

BOOL

CreateWellKnownSid(
         WELL_KNOWN_SID_TYPE WellKnownSidType,
     PSID DomainSid,
     PSID pSid,
      DWORD *cbSid
    );

BOOL

EqualDomainSid(
      PSID pSid1,
      PSID pSid2,
     BOOL *pfEqual
    );

BOOL

GetWindowsAccountDomainSid(
        PSID pSid,
     PSID pDomainSid,
     DWORD* cbDomainSid
    );

BOOL

IsValidSid (
     PSID pSid
    );

BOOL

EqualSid (
     PSID pSid1,
     PSID pSid2
    );

BOOL

EqualPrefixSid (
     PSID pSid1,
     PSID pSid2
    );

DWORD

GetSidLengthRequired (
     UCHAR nSubAuthorityCount
    );

BOOL

AllocateAndInitializeSid (
            PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
            BYTE nSubAuthorityCount,
            DWORD nSubAuthority0,
            DWORD nSubAuthority1,
            DWORD nSubAuthority2,
            DWORD nSubAuthority3,
            DWORD nSubAuthority4,
            DWORD nSubAuthority5,
            DWORD nSubAuthority6,
            DWORD nSubAuthority7,
     PSID *pSid
    );

PVOID

FreeSid(
     PSID pSid
    );

BOOL

InitializeSid (
     PSID Sid,
      PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
      BYTE nSubAuthorityCount
    );

PSID_IDENTIFIER_AUTHORITY

GetSidIdentifierAuthority (
     PSID pSid
    );

PDWORD

GetSidSubAuthority (
     PSID pSid,
     DWORD nSubAuthority
    );

PUCHAR

GetSidSubAuthorityCount (
     PSID pSid
    );

DWORD

GetLengthSid (
     PSID pSid
    );

BOOL

CopySid (
     DWORD nDestinationSidLength,
     PSID pDestinationSid,
     PSID pSourceSid
    );

BOOL

AreAllAccessesGranted (
     DWORD GrantedAccess,
     DWORD DesiredAccess
    );

BOOL

AreAnyAccessesGranted (
     DWORD GrantedAccess,
     DWORD DesiredAccess
    );

void

MapGenericMask (
     PDWORD AccessMask,
        PGENERIC_MAPPING GenericMapping
    );

BOOL

IsValidAcl (
     PACL pAcl
    );

BOOL

InitializeAcl (
     PACL pAcl,
     DWORD nAclLength,
     DWORD dwAclRevision
    );

BOOL

GetAclInformation (
     PACL pAcl,
     LPVOID pAclInformation,
     DWORD nAclInformationLength,
     ACL_INFORMATION_CLASS dwAclInformationClass
    );

BOOL

SetAclInformation (
     PACL pAcl,
     LPVOID pAclInformation,
        DWORD nAclInformationLength,
        ACL_INFORMATION_CLASS dwAclInformationClass
    );

BOOL

AddAce (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD dwStartingAceIndex,
     LPVOID pAceList,
        DWORD nAceListLength
    );

BOOL

DeleteAce (
     PACL pAcl,
        DWORD dwAceIndex
    );

BOOL

GetAce (
            PACL pAcl,
            DWORD dwAceIndex,
     LPVOID *pAce
    );

BOOL

AddAccessAllowedAce (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AccessMask,
        PSID pSid
    );

BOOL

AddAccessAllowedAceEx (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AceFlags,
        DWORD AccessMask,
        PSID pSid
    );

BOOL

AddMandatoryAce (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AceFlags,
        DWORD MandatoryPolicy,
        PSID pLabelSid
    );

BOOL

AddAccessDeniedAce (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AccessMask,
        PSID pSid
    );

BOOL

AddAccessDeniedAceEx (
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AceFlags,
        DWORD AccessMask,
        PSID pSid
    );

BOOL

AddAuditAccessAce(
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD dwAccessMask,
        PSID pSid,
        BOOL bAuditSuccess,
        BOOL bAuditFailure
    );

BOOL

AddAuditAccessAceEx(
     PACL pAcl,
        DWORD dwAceRevision,
        DWORD AceFlags,
        DWORD dwAccessMask,
        PSID pSid,
        BOOL bAuditSuccess,
        BOOL bAuditFailure
    );

BOOL

AddAccessAllowedObjectAce (
      PACL pAcl,
         DWORD dwAceRevision,
         DWORD AceFlags,
         DWORD AccessMask,
     GUID *ObjectTypeGuid,
     GUID *InheritedObjectTypeGuid,
         PSID pSid
    );

BOOL

AddAccessDeniedObjectAce (
      PACL pAcl,
         DWORD dwAceRevision,
         DWORD AceFlags,
         DWORD AccessMask,
     GUID *ObjectTypeGuid,
     GUID *InheritedObjectTypeGuid,
         PSID pSid
    );

BOOL

AddAuditAccessObjectAce (
      PACL pAcl,
         DWORD dwAceRevision,
         DWORD AceFlags,
         DWORD AccessMask,
     GUID *ObjectTypeGuid,
     GUID *InheritedObjectTypeGuid,
         PSID pSid,
         BOOL bAuditSuccess,
         BOOL bAuditFailure
    );

BOOL

FindFirstFreeAce (
            PACL pAcl,
     LPVOID *pAce
    );

BOOL

InitializeSecurityDescriptor (
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
      DWORD dwRevision
    );

BOOL

IsValidSecurityDescriptor (
     PSECURITY_DESCRIPTOR pSecurityDescriptor
    );

BOOL

IsValidRelativeSecurityDescriptor (
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
     ULONG SecurityDescriptorLength,
     SECURITY_INFORMATION RequiredInformation
    );

DWORD

GetSecurityDescriptorLength (
     PSECURITY_DESCRIPTOR pSecurityDescriptor
    );

BOOL

GetSecurityDescriptorControl (
      PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSECURITY_DESCRIPTOR_CONTROL pControl,
     LPDWORD lpdwRevision
    );

BOOL

SetSecurityDescriptorControl (
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
     SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
     SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
    );

BOOL

SetSecurityDescriptorDacl (
      PSECURITY_DESCRIPTOR pSecurityDescriptor,
         BOOL bDaclPresent,
     PACL pDacl,
         BOOL bDaclDefaulted
    );

BOOL

GetSecurityDescriptorDacl (
            PSECURITY_DESCRIPTOR pSecurityDescriptor,
           LPBOOL lpbDaclPresent,
     PACL *pDacl,
           LPBOOL lpbDaclDefaulted
    );

BOOL

SetSecurityDescriptorSacl (
      PSECURITY_DESCRIPTOR pSecurityDescriptor,
         BOOL bSaclPresent,
     PACL pSacl,
         BOOL bSaclDefaulted
    );

BOOL

GetSecurityDescriptorSacl (
            PSECURITY_DESCRIPTOR pSecurityDescriptor,
           LPBOOL lpbSaclPresent,
     PACL *pSacl,
           LPBOOL lpbSaclDefaulted
    );

BOOL

SetSecurityDescriptorOwner (
      PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID pOwner,
         BOOL bOwnerDefaulted
    );

BOOL

GetSecurityDescriptorOwner (
            PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID *pOwner,
           LPBOOL lpbOwnerDefaulted
    );

BOOL

SetSecurityDescriptorGroup (
      PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID pGroup,
         BOOL bGroupDefaulted
    );

BOOL

GetSecurityDescriptorGroup (
            PSECURITY_DESCRIPTOR pSecurityDescriptor,
     PSID *pGroup,
           LPBOOL lpbGroupDefaulted
    );

DWORD

SetSecurityDescriptorRMControl(
      PSECURITY_DESCRIPTOR SecurityDescriptor,
     PUCHAR RMControl
    );

DWORD

GetSecurityDescriptorRMControl(
      PSECURITY_DESCRIPTOR SecurityDescriptor,
     PUCHAR RMControl
    );

BOOL

CreatePrivateObjectSecurity (
        PSECURITY_DESCRIPTOR ParentDescriptor,
        PSECURITY_DESCRIPTOR CreatorDescriptor,
     PSECURITY_DESCRIPTOR * NewDescriptor,
            BOOL IsDirectoryObject,
        HANDLE Token,
            PGENERIC_MAPPING GenericMapping
    );

BOOL

ConvertToAutoInheritPrivateObjectSecurity(
        PSECURITY_DESCRIPTOR ParentDescriptor,
            PSECURITY_DESCRIPTOR CurrentSecurityDescriptor,
     PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
        GUID *ObjectType,
            BOOLEAN IsDirectoryObject,
            PGENERIC_MAPPING GenericMapping
    );

BOOL

CreatePrivateObjectSecurityEx (
        PSECURITY_DESCRIPTOR ParentDescriptor,
        PSECURITY_DESCRIPTOR CreatorDescriptor,
     PSECURITY_DESCRIPTOR * NewDescriptor,
        GUID *ObjectType,
            BOOL IsContainerObject,
            ULONG AutoInheritFlags,
        HANDLE Token,
            PGENERIC_MAPPING GenericMapping
    );

BOOL

CreatePrivateObjectSecurityWithMultipleInheritance (
        PSECURITY_DESCRIPTOR ParentDescriptor,
        PSECURITY_DESCRIPTOR CreatorDescriptor,
     PSECURITY_DESCRIPTOR * NewDescriptor,
     GUID **ObjectTypes,
            ULONG GuidCount,
            BOOL IsContainerObject,
            ULONG AutoInheritFlags,
        HANDLE Token,
            PGENERIC_MAPPING GenericMapping
    );

BOOL

SetPrivateObjectSecurity (
              SECURITY_INFORMATION SecurityInformation,
              PSECURITY_DESCRIPTOR ModificationDescriptor,
     PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
              PGENERIC_MAPPING GenericMapping,
          HANDLE Token
    );

BOOL

SetPrivateObjectSecurityEx (
              SECURITY_INFORMATION SecurityInformation,
              PSECURITY_DESCRIPTOR ModificationDescriptor,
     PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
              ULONG AutoInheritFlags,
              PGENERIC_MAPPING GenericMapping,
          HANDLE Token
    );

BOOL

GetPrivateObjectSecurity (
      PSECURITY_DESCRIPTOR ObjectDescriptor,
      SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR ResultantDescriptor,
      DWORD DescriptorLength,
     PDWORD ReturnLength
    );

BOOL

DestroyPrivateObjectSecurity (
     PSECURITY_DESCRIPTOR * ObjectDescriptor
    );

BOOL

MakeSelfRelativeSD (
        PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
     PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
     LPDWORD lpdwBufferLength
    );

BOOL

MakeAbsoluteSD (
        PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
     PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
     LPDWORD lpdwAbsoluteSecurityDescriptorSize,
     PACL pDacl,
     LPDWORD lpdwDaclSize,
     PACL pSacl,
     LPDWORD lpdwSaclSize,
     PSID pOwner,
     LPDWORD lpdwOwnerSize,
     PSID pPrimaryGroup,
     LPDWORD lpdwPrimaryGroupSize
    );

BOOL

MakeAbsoluteSD2 (
     PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
     LPDWORD lpdwBufferSize
    );

void

QuerySecurityAccessMask(
     SECURITY_INFORMATION SecurityInformation,
     LPDWORD DesiredAccess
    );

void

SetSecurityAccessMask(
     SECURITY_INFORMATION SecurityInformation,
     LPDWORD DesiredAccess
    );

BOOL

SetFileSecurityA (
     LPCSTR lpFileName,
     SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor
    );

BOOL

SetFileSecurityW (
     LPCWSTR lpFileName,
     SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor
    );

BOOL

GetFileSecurityA (
      LPCSTR lpFileName,
      SECURITY_INFORMATION RequestedInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
      DWORD nLength,
     LPDWORD lpnLengthNeeded
    );

BOOL

GetFileSecurityW (
      LPCWSTR lpFileName,
      SECURITY_INFORMATION RequestedInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
      DWORD nLength,
     LPDWORD lpnLengthNeeded
    );

BOOL

SetKernelObjectSecurity (
     HANDLE Handle,
     SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR SecurityDescriptor
    );

HANDLE

FindFirstChangeNotificationA(
     LPCSTR lpPathName,
     BOOL bWatchSubtree,
     DWORD dwNotifyFilter
    );

HANDLE

FindFirstChangeNotificationW(
     LPCWSTR lpPathName,
     BOOL bWatchSubtree,
     DWORD dwNotifyFilter
    );

BOOL

FindNextChangeNotification(
     HANDLE hChangeHandle
    );

BOOL

FindCloseChangeNotification(
     HANDLE hChangeHandle
    );

BOOL

ReadDirectoryChangesW(
            HANDLE hDirectory,
     LPVOID lpBuffer,
            DWORD nBufferLength,
            BOOL bWatchSubtree,
            DWORD dwNotifyFilter,
       LPDWORD lpBytesReturned,
     LPOVERLAPPED lpOverlapped,
        LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
    );

BOOL

VirtualLock(
     LPVOID lpAddress,
     SIZE_T dwSize
    );

BOOL

VirtualUnlock(
     LPVOID lpAddress,
     SIZE_T dwSize
    );

LPVOID

MapViewOfFileEx(
         HANDLE hFileMappingObject,
         DWORD dwDesiredAccess,
         DWORD dwFileOffsetHigh,
         DWORD dwFileOffsetLow,
         SIZE_T dwNumberOfBytesToMap,
     LPVOID lpBaseAddress
    );

LPVOID

MapViewOfFileExNuma(
         HANDLE hFileMappingObject,
         DWORD dwDesiredAccess,
         DWORD dwFileOffsetHigh,
         DWORD dwFileOffsetLow,
         SIZE_T dwNumberOfBytesToMap,
     LPVOID lpBaseAddress,
         DWORD nndPreferred
    );

BOOL

SetPriorityClass(
     HANDLE hProcess,
     DWORD dwPriorityClass
    );

DWORD

GetPriorityClass(
     HANDLE hProcess
    );

BOOL

IsBadReadPtr(
     const void *lp,
         UINT_PTR ucb
    );

BOOL

IsBadWritePtr(
     LPVOID lp,
         UINT_PTR ucb
    );

BOOL

IsBadHugeReadPtr(
     const void *lp,
         UINT_PTR ucb
    );

BOOL

IsBadHugeWritePtr(
     LPVOID lp,
         UINT_PTR ucb
    );

BOOL

IsBadCodePtr(
     FARPROC lpfn
    );

BOOL

IsBadStringPtrA(
     LPCSTR lpsz,
         UINT_PTR ucchMax
    );

BOOL

IsBadStringPtrW(
     LPCWSTR lpsz,
         UINT_PTR ucchMax
    );

BOOL

LookupAccountSidA(
     LPCSTR lpSystemName,
     PSID Sid,
     LPSTR Name,
      LPDWORD cchName,
     LPSTR ReferencedDomainName,
     LPDWORD cchReferencedDomainName,
     PSID_NAME_USE peUse
    );

BOOL

LookupAccountSidW(
     LPCWSTR lpSystemName,
     PSID Sid,
     LPWSTR Name,
      LPDWORD cchName,
     LPWSTR ReferencedDomainName,
     LPDWORD cchReferencedDomainName,
     PSID_NAME_USE peUse
    );

BOOL

LookupAccountNameA(
     LPCSTR lpSystemName,
         LPCSTR lpAccountName,
     PSID Sid,
      LPDWORD cbSid,
     LPSTR ReferencedDomainName,
      LPDWORD cchReferencedDomainName,
        PSID_NAME_USE peUse
    );

BOOL

LookupAccountNameW(
     LPCWSTR lpSystemName,
         LPCWSTR lpAccountName,
     PSID Sid,
      LPDWORD cbSid,
     LPWSTR ReferencedDomainName,
      LPDWORD cchReferencedDomainName,
        PSID_NAME_USE peUse
    );

BOOL

LookupPrivilegeValueA(
     LPCSTR lpSystemName,
         LPCSTR lpName,
        PLUID   lpLuid
    );

BOOL

LookupPrivilegeValueW(
     LPCWSTR lpSystemName,
         LPCWSTR lpName,
        PLUID   lpLuid
    );

BOOL

LookupPrivilegeNameA(
     LPCSTR lpSystemName,
         PLUID   lpLuid,
     LPSTR lpName,
      LPDWORD cchName
    );

BOOL

LookupPrivilegeNameW(
     LPCWSTR lpSystemName,
         PLUID   lpLuid,
     LPWSTR lpName,
      LPDWORD cchName
    );

BOOL

LookupPrivilegeDisplayNameA(
     LPCSTR lpSystemName,
         LPCSTR lpName,
     LPSTR lpDisplayName,
      LPDWORD cchDisplayName,
        LPDWORD lpLanguageId
    );

BOOL

LookupPrivilegeDisplayNameW(
     LPCWSTR lpSystemName,
         LPCWSTR lpName,
     LPWSTR lpDisplayName,
      LPDWORD cchDisplayName,
        LPDWORD lpLanguageId
    );

BOOL

AllocateLocallyUniqueId(
     PLUID Luid
    );

BOOL

BuildCommDCBA(
      LPCSTR lpDef,
     LPDCB lpDCB
    );

BOOL

BuildCommDCBW(
      LPCWSTR lpDef,
     LPDCB lpDCB
    );

BOOL

BuildCommDCBAndTimeoutsA(
      LPCSTR lpDef,
     LPDCB lpDCB,
     LPCOMMTIMEOUTS lpCommTimeouts
    );

BOOL

BuildCommDCBAndTimeoutsW(
      LPCWSTR lpDef,
     LPDCB lpDCB,
     LPCOMMTIMEOUTS lpCommTimeouts
    );

BOOL

CommConfigDialogA(
         LPCSTR lpszName,
     HWND hWnd,
      LPCOMMCONFIG lpCC
    );

BOOL

CommConfigDialogW(
         LPCWSTR lpszName,
     HWND hWnd,
      LPCOMMCONFIG lpCC
    );

BOOL

GetDefaultCommConfigA(
        LPCSTR lpszName,
     LPCOMMCONFIG lpCC,
     LPDWORD lpdwSize
    );

BOOL

GetDefaultCommConfigW(
        LPCWSTR lpszName,
     LPCOMMCONFIG lpCC,
     LPDWORD lpdwSize
    );

BOOL

SetDefaultCommConfigA(
     LPCSTR lpszName,
     LPCOMMCONFIG lpCC,
     DWORD dwSize
    );

BOOL

SetDefaultCommConfigW(
     LPCWSTR lpszName,
     LPCOMMCONFIG lpCC,
     DWORD dwSize
    );

BOOL

GetComputerNameA (
      LPSTR lpBuffer,
     LPDWORD nSize
    );

BOOL

GetComputerNameW (
      LPWSTR lpBuffer,
     LPDWORD nSize
    );

BOOL

SetComputerNameA (
     LPCSTR lpComputerName
    );

BOOL

SetComputerNameW (
     LPCWSTR lpComputerName
    );
typedef enum _COMPUTER_NAME_FORMAT {
    ComputerNameNetBIOS,
    ComputerNameDnsHostname,
    ComputerNameDnsDomain,
    ComputerNameDnsFullyQualified,
    ComputerNamePhysicalNetBIOS,
    ComputerNamePhysicalDnsHostname,
    ComputerNamePhysicalDnsDomain,
    ComputerNamePhysicalDnsFullyQualified,
    ComputerNameMax
} COMPUTER_NAME_FORMAT ;

BOOL

GetComputerNameExA (
        COMPUTER_NAME_FORMAT NameType,
     LPSTR lpBuffer,
     LPDWORD nSize
    );

BOOL

GetComputerNameExW (
        COMPUTER_NAME_FORMAT NameType,
     LPWSTR lpBuffer,
     LPDWORD nSize
    );

BOOL

SetComputerNameExA (
     COMPUTER_NAME_FORMAT NameType,
     LPCSTR lpBuffer
    );

BOOL

SetComputerNameExW (
     COMPUTER_NAME_FORMAT NameType,
     LPCWSTR lpBuffer
    );

BOOL

DnsHostnameToComputerNameA (
        LPCSTR Hostname,
      LPSTR ComputerName,
     LPDWORD nSize
    );

BOOL

DnsHostnameToComputerNameW (
        LPCWSTR Hostname,
      LPWSTR ComputerName,
     LPDWORD nSize
    );

BOOL

GetUserNameA (
     LPSTR lpBuffer,
     LPDWORD pcbBuffer
    );

BOOL

GetUserNameW (
     LPWSTR lpBuffer,
     LPDWORD pcbBuffer
    );

BOOL

LogonUserA (
            LPCSTR lpszUsername,
        LPCSTR lpszDomain,
            LPCSTR lpszPassword,
            DWORD dwLogonType,
            DWORD dwLogonProvider,
     PHANDLE phToken
    );

BOOL

LogonUserW (
            LPCWSTR lpszUsername,
        LPCWSTR lpszDomain,
            LPCWSTR lpszPassword,
            DWORD dwLogonType,
            DWORD dwLogonProvider,
     PHANDLE phToken
    );

BOOL

LogonUserExA (
                LPCSTR lpszUsername,
            LPCSTR lpszDomain,
                LPCSTR lpszPassword,
                DWORD dwLogonType,
                DWORD dwLogonProvider,
     PHANDLE phToken,
     PSID  *ppLogonSid,
     PVOID *ppProfileBuffer,
           LPDWORD pdwProfileLength,
           PQUOTA_LIMITS pQuotaLimits
    );

BOOL

LogonUserExW (
                LPCWSTR lpszUsername,
            LPCWSTR lpszDomain,
                LPCWSTR lpszPassword,
                DWORD dwLogonType,
                DWORD dwLogonProvider,
     PHANDLE phToken,
     PSID  *ppLogonSid,
     PVOID *ppProfileBuffer,
           LPDWORD pdwProfileLength,
           PQUOTA_LIMITS pQuotaLimits
    );

BOOL

ImpersonateLoggedOnUser(
     HANDLE  hToken
    );

BOOL

CreateProcessAsUserA (
        HANDLE hToken,
        LPCSTR lpApplicationName,
     LPSTR lpCommandLine,
        LPSECURITY_ATTRIBUTES lpProcessAttributes,
        LPSECURITY_ATTRIBUTES lpThreadAttributes,
            BOOL bInheritHandles,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCSTR lpCurrentDirectory,
            LPSTARTUPINFOA lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
    );

BOOL

CreateProcessAsUserW (
        HANDLE hToken,
        LPCWSTR lpApplicationName,
     LPWSTR lpCommandLine,
        LPSECURITY_ATTRIBUTES lpProcessAttributes,
        LPSECURITY_ATTRIBUTES lpThreadAttributes,
            BOOL bInheritHandles,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCWSTR lpCurrentDirectory,
            LPSTARTUPINFOW lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
    );

BOOL

CreateProcessWithLogonW(
            LPCWSTR lpUsername,
        LPCWSTR lpDomain,
            LPCWSTR lpPassword,
            DWORD dwLogonFlags,
        LPCWSTR lpApplicationName,
     LPWSTR lpCommandLine,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCWSTR lpCurrentDirectory,
            LPSTARTUPINFOW lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
      );

BOOL

CreateProcessWithTokenW(
            HANDLE hToken,
            DWORD dwLogonFlags,
        LPCWSTR lpApplicationName,
     LPWSTR lpCommandLine,
            DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCWSTR lpCurrentDirectory,
            LPSTARTUPINFOW lpStartupInfo,
           LPPROCESS_INFORMATION lpProcessInformation
      );

BOOL

ImpersonateAnonymousToken(
     HANDLE ThreadHandle
    );

BOOL

DuplicateTokenEx(
            HANDLE hExistingToken,
            DWORD dwDesiredAccess,
        LPSECURITY_ATTRIBUTES lpTokenAttributes,
            SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
            TOKEN_TYPE TokenType,
     PHANDLE phNewToken);

BOOL

CreateRestrictedToken(
            HANDLE ExistingTokenHandle,
            DWORD Flags,
            DWORD DisableSidCount,
     PSID_AND_ATTRIBUTES SidsToDisable,
            DWORD DeletePrivilegeCount,
     PLUID_AND_ATTRIBUTES PrivilegesToDelete,
            DWORD RestrictedSidCount,
     PSID_AND_ATTRIBUTES SidsToRestrict,
     PHANDLE NewTokenHandle
    );

BOOL

IsTokenRestricted(
     HANDLE TokenHandle
    );

BOOL

IsTokenUntrusted(
     HANDLE TokenHandle
    );

BOOL

CheckTokenMembership(
     HANDLE TokenHandle,
         PSID SidToCheck,
        PBOOL IsMember
    );
typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK ;

BOOL

RegisterWaitForSingleObject(
     PHANDLE phNewWaitObject,
            HANDLE hObject,
            WAITORTIMERCALLBACK Callback,
        PVOID Context,
            ULONG dwMilliseconds,
            ULONG dwFlags
    );

HANDLE

RegisterWaitForSingleObjectEx(
         HANDLE hObject,
         WAITORTIMERCALLBACK Callback,
     PVOID Context,
         ULONG dwMilliseconds,
         ULONG dwFlags
    );

BOOL

UnregisterWait(
     HANDLE WaitHandle
    );

BOOL

UnregisterWaitEx(
         HANDLE WaitHandle,
     HANDLE CompletionEvent
    );

BOOL

QueueUserWorkItem(
         LPTHREAD_START_ROUTINE Function,
     PVOID Context,
         ULONG Flags
    );

BOOL

BindIoCompletionCallback (
     HANDLE FileHandle,
     LPOVERLAPPED_COMPLETION_ROUTINE Function,
     ULONG Flags
    );

HANDLE

CreateTimerQueue(
    void
    );

BOOL

CreateTimerQueueTimer(
     PHANDLE phNewTimer,
        HANDLE TimerQueue,
            WAITORTIMERCALLBACK Callback,
        PVOID Parameter,
            DWORD DueTime,
            DWORD Period,
            ULONG Flags
    ) ;

BOOL

ChangeTimerQueueTimer(
     HANDLE TimerQueue,
      HANDLE Timer,
         ULONG DueTime,
         ULONG Period
    );

BOOL

DeleteTimerQueueTimer(
     HANDLE TimerQueue,
         HANDLE Timer,
     HANDLE CompletionEvent
    );

BOOL

DeleteTimerQueueEx(
         HANDLE TimerQueue,
     HANDLE CompletionEvent
    );

HANDLE

SetTimerQueueTimer(
     HANDLE TimerQueue,
         WAITORTIMERCALLBACK Callback,
     PVOID Parameter,
         DWORD DueTime,
         DWORD Period,
         BOOL PreferIo
    );

BOOL

CancelTimerQueueTimer(
     HANDLE TimerQueue,
         HANDLE Timer
    );

BOOL

DeleteTimerQueue(
     HANDLE TimerQueue
    );
typedef void ( *PTP_WIN32_IO_CALLBACK)(
         PTP_CALLBACK_INSTANCE Instance,
     PVOID                 Context,
     PVOID                 Overlapped,
            ULONG                 IoResult,
            ULONG_PTR             NumberOfBytesTransferred,
         PTP_IO                Io
    );

PTP_POOL

CreateThreadpool(
     PVOID reserved
    );

void

SetThreadpoolThreadMaximum(
     PTP_POOL ptpp,
        DWORD    cthrdMost
    );

BOOL

SetThreadpoolThreadMinimum(
     PTP_POOL ptpp,
        DWORD    cthrdMic
    );

void

CloseThreadpool(
     PTP_POOL ptpp
    );

PTP_CLEANUP_GROUP

CreateThreadpoolCleanupGroup(
    void
    );

void

CloseThreadpoolCleanupGroupMembers(
         PTP_CLEANUP_GROUP ptpcg,
            BOOL              fCancelPendingCallbacks,
     PVOID             pvCleanupContext
    );

void

CloseThreadpoolCleanupGroup(
     PTP_CLEANUP_GROUP ptpcg
    );
__inline
void
InitializeThreadpoolEnvironment(
     PTP_CALLBACK_ENVIRON pcbe
    )
{
    TpInitializeCallbackEnviron(pcbe);
}
__inline
void
SetThreadpoolCallbackPool(
     PTP_CALLBACK_ENVIRON pcbe,
        PTP_POOL             ptpp
    )
{
    TpSetCallbackThreadpool(pcbe, ptpp);
}
__inline
void
SetThreadpoolCallbackCleanupGroup(
      PTP_CALLBACK_ENVIRON              pcbe,
         PTP_CLEANUP_GROUP                 ptpcg,
     PTP_CLEANUP_GROUP_CANCEL_CALLBACK pfng
    )
{
    TpSetCallbackCleanupGroup(pcbe, ptpcg, pfng);
}
__inline
void
SetThreadpoolCallbackRunsLong(
     PTP_CALLBACK_ENVIRON pcbe
    )
{
    TpSetCallbackLongFunction(pcbe);
}
__inline
void
SetThreadpoolCallbackLibrary(
     PTP_CALLBACK_ENVIRON pcbe,
        PVOID                mod
    )
{
    TpSetCallbackRaceWithDll(pcbe, mod);
}
__inline
void
DestroyThreadpoolEnvironment(
     PTP_CALLBACK_ENVIRON pcbe
    )
{
    TpDestroyCallbackEnviron(pcbe);
}

void

SetEventWhenCallbackReturns(
     PTP_CALLBACK_INSTANCE pci,
        HANDLE                evt
    );

void

ReleaseSemaphoreWhenCallbackReturns(
     PTP_CALLBACK_INSTANCE pci,
        HANDLE                sem,
        DWORD                 crel
    );

void

ReleaseMutexWhenCallbackReturns(
     PTP_CALLBACK_INSTANCE pci,
        HANDLE                mut
    );

void

LeaveCriticalSectionWhenCallbackReturns(
     PTP_CALLBACK_INSTANCE pci,
     PCRITICAL_SECTION     pcs
    );

void

FreeLibraryWhenCallbackReturns(
     PTP_CALLBACK_INSTANCE pci,
        HMODULE               mod
    );

BOOL

CallbackMayRunLong(
     PTP_CALLBACK_INSTANCE pci
    );

void

DisassociateCurrentThreadFromCallback(
     PTP_CALLBACK_INSTANCE pci
    );

BOOL

TrySubmitThreadpoolCallback(
            PTP_SIMPLE_CALLBACK  pfns,
     PVOID                pv,
        PTP_CALLBACK_ENVIRON pcbe
    );

PTP_WORK

CreateThreadpoolWork(
            PTP_WORK_CALLBACK    pfnwk,
     PVOID                pv,
        PTP_CALLBACK_ENVIRON pcbe
    );

void

SubmitThreadpoolWork(
     PTP_WORK pwk
    );

void

WaitForThreadpoolWorkCallbacks(
     PTP_WORK pwk,
        BOOL     fCancelPendingCallbacks
    );

void

CloseThreadpoolWork(
     PTP_WORK pwk
    );

PTP_TIMER

CreateThreadpoolTimer(
            PTP_TIMER_CALLBACK   pfnti,
     PVOID                pv,
        PTP_CALLBACK_ENVIRON pcbe
    );

void

SetThreadpoolTimer(
      PTP_TIMER pti,
     PFILETIME pftDueTime,
         DWORD     msPeriod,
     DWORD     msWindowLength
    );

BOOL

IsThreadpoolTimerSet(
     PTP_TIMER pti
    );

void

WaitForThreadpoolTimerCallbacks(
     PTP_TIMER pti,
        BOOL      fCancelPendingCallbacks
    );

void

CloseThreadpoolTimer(
     PTP_TIMER pti
    );

PTP_WAIT

CreateThreadpoolWait(
            PTP_WAIT_CALLBACK    pfnwa,
     PVOID                pv,
        PTP_CALLBACK_ENVIRON pcbe
    );

void

SetThreadpoolWait(
      PTP_WAIT  pwa,
     HANDLE    h,
     PFILETIME pftTimeout
    );

void

WaitForThreadpoolWaitCallbacks(
     PTP_WAIT pwa,
        BOOL     fCancelPendingCallbacks
    );

void

CloseThreadpoolWait(
     PTP_WAIT pwa
    );

PTP_IO

CreateThreadpoolIo(
            HANDLE                fl,
            PTP_WIN32_IO_CALLBACK pfnio,
     PVOID                 pv,
        PTP_CALLBACK_ENVIRON  pcbe
    );

void

StartThreadpoolIo(
     PTP_IO pio
    );

void

CancelThreadpoolIo(
     PTP_IO pio
    );

void

WaitForThreadpoolIoCallbacks(
     PTP_IO pio,
        BOOL   fCancelPendingCallbacks
    );

void

CloseThreadpoolIo(
     PTP_IO pio
    );

HANDLE

CreatePrivateNamespaceA(
     LPSECURITY_ATTRIBUTES lpPrivateNamespaceAttributes,
         LPVOID lpBoundaryDescriptor,
         LPCSTR lpAliasPrefix
    );

HANDLE

CreatePrivateNamespaceW(
     LPSECURITY_ATTRIBUTES lpPrivateNamespaceAttributes,
         LPVOID lpBoundaryDescriptor,
         LPCWSTR lpAliasPrefix
    );

HANDLE

OpenPrivateNamespaceA(
         LPVOID lpBoundaryDescriptor,
         LPCSTR lpAliasPrefix
    );

HANDLE

OpenPrivateNamespaceW(
         LPVOID lpBoundaryDescriptor,
         LPCWSTR lpAliasPrefix
    );

BOOLEAN

ClosePrivateNamespace(
     HANDLE Handle,
     ULONG Flags
    );
HANDLE

CreateBoundaryDescriptorA(
     LPCSTR Name,
     ULONG Flags
    );
HANDLE

CreateBoundaryDescriptorW(
     LPCWSTR Name,
     ULONG Flags
    );

BOOL

AddSIDToBoundaryDescriptor(
     HANDLE * BoundaryDescriptor,
     PSID RequiredSid
    );

void

DeleteBoundaryDescriptor(
     HANDLE BoundaryDescriptor
    );
typedef struct tagHW_PROFILE_INFOA {
    DWORD  dwDockInfo;
    CHAR   szHwProfileGuid[39];
    CHAR   szHwProfileName[80];
} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;
typedef struct tagHW_PROFILE_INFOW {
    DWORD  dwDockInfo;
    WCHAR  szHwProfileGuid[39];
    WCHAR  szHwProfileName[80];
} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;
typedef HW_PROFILE_INFOA HW_PROFILE_INFO;
typedef LPHW_PROFILE_INFOA LPHW_PROFILE_INFO;

BOOL

GetCurrentHwProfileA (
     LPHW_PROFILE_INFOA  lpHwProfileInfo
    );

BOOL

GetCurrentHwProfileW (
     LPHW_PROFILE_INFOW  lpHwProfileInfo
    );

BOOL

QueryPerformanceCounter(
     LARGE_INTEGER *lpPerformanceCount
    );

BOOL

QueryPerformanceFrequency(
     LARGE_INTEGER *lpFrequency
    );

BOOL

GetVersionExA(
     LPOSVERSIONINFOA lpVersionInformation
    );

BOOL

GetVersionExW(
     LPOSVERSIONINFOW lpVersionInformation
    );

BOOL

VerifyVersionInfoA(
     LPOSVERSIONINFOEXA lpVersionInformation,
        DWORD dwTypeMask,
        DWORDLONG dwlConditionMask
    );

BOOL

VerifyVersionInfoW(
     LPOSVERSIONINFOEXW lpVersionInformation,
        DWORD dwTypeMask,
        DWORDLONG dwlConditionMask
    );

BOOL

GetProductInfo(
      DWORD  dwOSMajorVersion,
      DWORD  dwOSMinorVersion,
      DWORD  dwSpMajorVersion,
      DWORD  dwSpMinorVersion,
     PDWORD pdwReturnedProductType
    );
__inline HRESULT HRESULT_FROM_WIN32(unsigned long x) { return (HRESULT)(x) <= 0 ? (HRESULT)(x) : (HRESULT) (((x) & 0x0000FFFF) | (7 << 16) | 0x80000000);}
typedef struct _SYSTEM_POWER_STATUS {
    BYTE ACLineStatus;
    BYTE BatteryFlag;
    BYTE BatteryLifePercent;
    BYTE Reserved1;
    DWORD BatteryLifeTime;
    DWORD BatteryFullLifeTime;
}   SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
BOOL

GetSystemPowerStatus(
     LPSYSTEM_POWER_STATUS lpSystemPowerStatus
    );
BOOL

SetSystemPowerState(
     BOOL fSuspend,
     BOOL fForce
    );

BOOL

AllocateUserPhysicalPages(
        HANDLE hProcess,
     PULONG_PTR NumberOfPages,
     PULONG_PTR PageArray
    );

BOOL

AllocateUserPhysicalPagesNuma(
        HANDLE hProcess,
     PULONG_PTR NumberOfPages,
     PULONG_PTR PageArray,
        DWORD nndPreferred
    );

BOOL

FreeUserPhysicalPages(
        HANDLE hProcess,
     PULONG_PTR NumberOfPages,
     PULONG_PTR PageArray
    );

BOOL

MapUserPhysicalPages(
     PVOID VirtualAddress,
     ULONG_PTR NumberOfPages,
     PULONG_PTR PageArray
    );

BOOL

MapUserPhysicalPagesScatter(
     PVOID *VirtualAddresses,
     ULONG_PTR NumberOfPages,
     PULONG_PTR PageArray
    );

HANDLE

CreateJobObjectA(
     LPSECURITY_ATTRIBUTES lpJobAttributes,
     LPCSTR lpName
    );

HANDLE

CreateJobObjectW(
     LPSECURITY_ATTRIBUTES lpJobAttributes,
     LPCWSTR lpName
    );

HANDLE

OpenJobObjectA(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCSTR lpName
    );

HANDLE

OpenJobObjectW(
     DWORD dwDesiredAccess,
     BOOL bInheritHandle,
     LPCWSTR lpName
    );

BOOL

AssignProcessToJobObject(
     HANDLE hJob,
     HANDLE hProcess
    );

BOOL

TerminateJobObject(
     HANDLE hJob,
     UINT uExitCode
    );

BOOL

QueryInformationJobObject(
      HANDLE hJob,
          JOBOBJECTINFOCLASS JobObjectInformationClass,
     LPVOID lpJobObjectInformation,
          DWORD cbJobObjectInformationLength,
     LPDWORD lpReturnLength
    );

BOOL

SetInformationJobObject(
     HANDLE hJob,
     JOBOBJECTINFOCLASS JobObjectInformationClass,
     LPVOID lpJobObjectInformation,
     DWORD cbJobObjectInformationLength
    );

BOOL

IsProcessInJob (
         HANDLE ProcessHandle,
     HANDLE JobHandle,
        PBOOL Result
    );

BOOL

CreateJobSet (
     ULONG NumJob,
     PJOB_SET_ARRAY UserJobSet,
     ULONG Flags);

PVOID

AddVectoredExceptionHandler (
     ULONG First,
     PVECTORED_EXCEPTION_HANDLER Handler
    );

ULONG

RemoveVectoredExceptionHandler (
     PVOID Handle
    );

PVOID

AddVectoredContinueHandler (
     ULONG First,
     PVECTORED_EXCEPTION_HANDLER Handler
    );

ULONG

RemoveVectoredContinueHandler (
     PVOID Handle
    );

HANDLE

FindFirstVolumeA(
     LPSTR lpszVolumeName,
     DWORD cchBufferLength
    );

HANDLE

FindFirstVolumeW(
     LPWSTR lpszVolumeName,
     DWORD cchBufferLength
    );

BOOL

FindNextVolumeA(
     HANDLE hFindVolume,
     LPSTR lpszVolumeName,
        DWORD cchBufferLength
    );

BOOL

FindNextVolumeW(
     HANDLE hFindVolume,
     LPWSTR lpszVolumeName,
        DWORD cchBufferLength
    );

BOOL

FindVolumeClose(
     HANDLE hFindVolume
    );

HANDLE

FindFirstVolumeMountPointA(
     LPCSTR lpszRootPathName,
     LPSTR lpszVolumeMountPoint,
     DWORD cchBufferLength
    );

HANDLE

FindFirstVolumeMountPointW(
     LPCWSTR lpszRootPathName,
     LPWSTR lpszVolumeMountPoint,
     DWORD cchBufferLength
    );

BOOL

FindNextVolumeMountPointA(
     HANDLE hFindVolumeMountPoint,
     LPSTR lpszVolumeMountPoint,
     DWORD cchBufferLength
    );

BOOL

FindNextVolumeMountPointW(
     HANDLE hFindVolumeMountPoint,
     LPWSTR lpszVolumeMountPoint,
     DWORD cchBufferLength
    );

BOOL

FindVolumeMountPointClose(
     HANDLE hFindVolumeMountPoint
    );

BOOL

SetVolumeMountPointA(
     LPCSTR lpszVolumeMountPoint,
     LPCSTR lpszVolumeName
    );

BOOL

SetVolumeMountPointW(
     LPCWSTR lpszVolumeMountPoint,
     LPCWSTR lpszVolumeName
    );

BOOL

DeleteVolumeMountPointA(
     LPCSTR lpszVolumeMountPoint
    );

BOOL

DeleteVolumeMountPointW(
     LPCWSTR lpszVolumeMountPoint
    );

BOOL

GetVolumeNameForVolumeMountPointA(
     LPCSTR lpszVolumeMountPoint,
     LPSTR lpszVolumeName,
     DWORD cchBufferLength
    );

BOOL

GetVolumeNameForVolumeMountPointW(
     LPCWSTR lpszVolumeMountPoint,
     LPWSTR lpszVolumeName,
     DWORD cchBufferLength
    );

BOOL

GetVolumePathNameA(
     LPCSTR lpszFileName,
     LPSTR lpszVolumePathName,
     DWORD cchBufferLength
    );

BOOL

GetVolumePathNameW(
     LPCWSTR lpszFileName,
     LPWSTR lpszVolumePathName,
     DWORD cchBufferLength
    );

BOOL

GetVolumePathNamesForVolumeNameA(
      LPCSTR lpszVolumeName,
      LPCH lpszVolumePathNames,
      DWORD cchBufferLength,
     PDWORD lpcchReturnLength
    );

BOOL

GetVolumePathNamesForVolumeNameW(
      LPCWSTR lpszVolumeName,
      LPWCH lpszVolumePathNames,
      DWORD cchBufferLength,
     PDWORD lpcchReturnLength
    );
typedef struct tagACTCTXA {
    ULONG       cbSize;
    DWORD       dwFlags;
    LPCSTR      lpSource;
    USHORT      wProcessorArchitecture;
    LANGID      wLangId;
    LPCSTR      lpAssemblyDirectory;
    LPCSTR      lpResourceName;
    LPCSTR      lpApplicationName;
    HMODULE     hModule;
} ACTCTXA, *PACTCTXA;
typedef struct tagACTCTXW {
    ULONG       cbSize;
    DWORD       dwFlags;
    LPCWSTR     lpSource;
    USHORT      wProcessorArchitecture;
    LANGID      wLangId;
    LPCWSTR     lpAssemblyDirectory;
    LPCWSTR     lpResourceName;
    LPCWSTR     lpApplicationName;
    HMODULE     hModule;
} ACTCTXW, *PACTCTXW;
typedef ACTCTXA ACTCTX;
typedef PACTCTXA PACTCTX;
typedef const ACTCTXA *PCACTCTXA;
typedef const ACTCTXW *PCACTCTXW;
typedef PCACTCTXA PCACTCTX;

HANDLE

CreateActCtxA(
     PCACTCTXA pActCtx
    );

HANDLE

CreateActCtxW(
     PCACTCTXW pActCtx
    );

void

AddRefActCtx(
     HANDLE hActCtx
    );

void

ReleaseActCtx(
     HANDLE hActCtx
    );

BOOL

ZombifyActCtx(
     HANDLE hActCtx
    );

BOOL

ActivateActCtx(
     HANDLE hActCtx,
       ULONG_PTR *lpCookie
    );

BOOL

DeactivateActCtx(
     DWORD dwFlags,
     ULONG_PTR ulCookie
    );

BOOL

GetCurrentActCtx(
     HANDLE *lphActCtx);
typedef struct tagACTCTX_SECTION_KEYED_DATA_2600 {
    ULONG cbSize;
    ULONG ulDataFormatVersion;
    PVOID lpData;
    ULONG ulLength;
    PVOID lpSectionGlobalData;
    ULONG ulSectionGlobalDataLength;
    PVOID lpSectionBase;
    ULONG ulSectionTotalLength;
    HANDLE hActCtx;
    ULONG ulAssemblyRosterIndex;
} ACTCTX_SECTION_KEYED_DATA_2600, *PACTCTX_SECTION_KEYED_DATA_2600;
typedef const ACTCTX_SECTION_KEYED_DATA_2600 * PCACTCTX_SECTION_KEYED_DATA_2600;
typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
    PVOID lpInformation;
    PVOID lpSectionBase;
    ULONG ulSectionLength;
    PVOID lpSectionGlobalDataBase;
    ULONG ulSectionGlobalDataLength;
} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
typedef struct tagACTCTX_SECTION_KEYED_DATA {
    ULONG cbSize;
    ULONG ulDataFormatVersion;
    PVOID lpData;
    ULONG ulLength;
    PVOID lpSectionGlobalData;
    ULONG ulSectionGlobalDataLength;
    PVOID lpSectionBase;
    ULONG ulSectionTotalLength;
    HANDLE hActCtx;
    ULONG ulAssemblyRosterIndex;
    ULONG ulFlags;
    ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;
} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA;
typedef const ACTCTX_SECTION_KEYED_DATA * PCACTCTX_SECTION_KEYED_DATA;

BOOL

FindActCtxSectionStringA(
           DWORD dwFlags,
     const GUID *lpExtensionGuid,
           ULONG ulSectionId,
           LPCSTR lpStringToFind,
          PACTCTX_SECTION_KEYED_DATA ReturnedData
    );

BOOL

FindActCtxSectionStringW(
           DWORD dwFlags,
     const GUID *lpExtensionGuid,
           ULONG ulSectionId,
           LPCWSTR lpStringToFind,
          PACTCTX_SECTION_KEYED_DATA ReturnedData
    );

BOOL

FindActCtxSectionGuid(
           DWORD dwFlags,
     const GUID *lpExtensionGuid,
           ULONG ulSectionId,
       const GUID *lpGuidToFind,
          PACTCTX_SECTION_KEYED_DATA ReturnedData
    );
typedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION {
    HANDLE  hActCtx;
    DWORD   dwFlags;
} ACTIVATION_CONTEXT_BASIC_INFORMATION, *PACTIVATION_CONTEXT_BASIC_INFORMATION;
typedef const struct _ACTIVATION_CONTEXT_BASIC_INFORMATION *PCACTIVATION_CONTEXT_BASIC_INFORMATION;

BOOL

QueryActCtxW(
          DWORD dwFlags,
          HANDLE hActCtx,
      PVOID pvSubInstance,
          ULONG ulInfoClass,
     PVOID pvBuffer,
          SIZE_T cbBuffer,
     SIZE_T *pcbWrittenOrRequired
    );
typedef BOOL ( * PQUERYACTCTXW_FUNC)(
          DWORD dwFlags,
          HANDLE hActCtx,
      PVOID pvSubInstance,
          ULONG ulInfoClass,
     PVOID pvBuffer,
          SIZE_T cbBuffer,
     SIZE_T *pcbWrittenOrRequired
    );

BOOL

ProcessIdToSessionId(
      DWORD dwProcessId,
     DWORD *pSessionId
    );

DWORD

WTSGetActiveConsoleSessionId(
    void
    );

BOOL

IsWow64Process(
      HANDLE hProcess,
     PBOOL Wow64Process
    );

BOOL

GetLogicalProcessorInformation(
     PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer,
     PDWORD ReturnedLength
    );

BOOL

GetNumaHighestNodeNumber(
     PULONG HighestNodeNumber
    );

BOOL

GetNumaProcessorNode(
      UCHAR Processor,
     PUCHAR NodeNumber
    );

BOOL

GetNumaNodeProcessorMask(
      UCHAR Node,
     PULONGLONG ProcessorMask
    );

BOOL

GetNumaAvailableMemoryNode(
      UCHAR Node,
     PULONGLONG AvailableBytes
    );

BOOL

GetNumaProximityNode(
      ULONG ProximityId,
     PUCHAR NodeNumber
    );
typedef DWORD ( *APPLICATION_RECOVERY_CALLBACK)(PVOID pvParameter);

HRESULT

RegisterApplicationRecoveryCallback(
      APPLICATION_RECOVERY_CALLBACK pRecoveyCallback,
      PVOID pvParameter,
     DWORD dwPingInterval,
     DWORD dwFlags
    );

HRESULT

UnregisterApplicationRecoveryCallback();

HRESULT

RegisterApplicationRestart(
     PCWSTR pwzCommandline,
     DWORD dwFlags
    );

HRESULT

UnregisterApplicationRestart();

HRESULT

GetApplicationRecoveryCallback(
      HANDLE hProcess,
     APPLICATION_RECOVERY_CALLBACK* pRecoveryCallback,
     PVOID* ppvParameter,
     PDWORD pdwPingInterval,
     PDWORD pdwFlags
    );

HRESULT

GetApplicationRestartSettings(
     HANDLE hProcess,
     PWSTR pwzCommandline,
     PDWORD pcchSize,
     PDWORD pdwFlags
    );

HRESULT

ApplicationRecoveryInProgress(
     PBOOL pbCancelled
    );

void

ApplicationRecoveryFinished(
     BOOL bSuccess
    );
typedef enum _FILE_INFO_BY_HANDLE_CLASS {
    FileBasicInfo,
    FileStandardInfo,
    FileNameInfo,
    FileRenameInfo,
    FileDispositionInfo,
    FileAllocationInfo,
    FileEndOfFileInfo,
    FileStreamInfo,
    FileCompressionInfo,
    FileAttributeTagInfo,
    FileIdBothDirectoryInfo,
    FileIdBothDirectoryRestartInfo,
    FileIoPriorityHintInfo,
    MaximumFileInfoByHandleClass
} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
typedef struct _FILE_BASIC_INFO {
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    DWORD FileAttributes;
} FILE_BASIC_INFO, *PFILE_BASIC_INFO;
typedef struct _FILE_STANDARD_INFO {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER EndOfFile;
    DWORD NumberOfLinks;
    BOOLEAN DeletePending;
    BOOLEAN Directory;
} FILE_STANDARD_INFO, *PFILE_STANDARD_INFO;
typedef struct _FILE_NAME_INFO {
    DWORD FileNameLength;
    WCHAR FileName[1];
} FILE_NAME_INFO, *PFILE_NAME_INFO;
typedef struct _FILE_RENAME_INFO {
    BOOLEAN ReplaceIfExists;
    HANDLE RootDirectory;
    DWORD FileNameLength;
    WCHAR FileName[1];
} FILE_RENAME_INFO, *PFILE_RENAME_INFO;
typedef struct _FILE_ALLOCATION_INFO {
    LARGE_INTEGER AllocationSize;
} FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO;
typedef struct _FILE_END_OF_FILE_INFO {
    LARGE_INTEGER EndOfFile;
} FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO;
typedef struct _FILE_STREAM_INFO {
    DWORD NextEntryOffset;
    DWORD StreamNameLength;
    LARGE_INTEGER StreamSize;
    LARGE_INTEGER StreamAllocationSize;
    WCHAR StreamName[1];
} FILE_STREAM_INFO, *PFILE_STREAM_INFO;
typedef struct _FILE_COMPRESSION_INFO {
    LARGE_INTEGER CompressedFileSize;
    WORD CompressionFormat;
    UCHAR CompressionUnitShift;
    UCHAR ChunkShift;
    UCHAR ClusterShift;
    UCHAR Reserved[3];
} FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO;
typedef struct _FILE_ATTRIBUTE_TAG_INFO {
    DWORD FileAttributes;
    DWORD ReparseTag;
} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO;
typedef struct _FILE_DISPOSITION_INFO {
    BOOLEAN DeleteFileA;
} FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO;
typedef struct _FILE_ID_BOTH_DIR_INFO {
    DWORD NextEntryOffset;
    DWORD FileIndex;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER EndOfFile;
    LARGE_INTEGER AllocationSize;
    DWORD FileAttributes;
    DWORD FileNameLength;
    DWORD EaSize;
    CCHAR ShortNameLength;
    WCHAR ShortName[12];
    LARGE_INTEGER FileId;
    WCHAR FileName[1];
} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;
typedef enum _PRIORITY_HINT {
      IoPriorityHintVeryLow = 0,
      IoPriorityHintLow,
      IoPriorityHintNormal,
      MaximumIoPriorityHintType
} PRIORITY_HINT;
typedef struct _FILE_IO_PRIORITY_HINT_INFO {
    PRIORITY_HINT PriorityHint;
} FILE_IO_PRIORITY_HINT_INFO, *PFILE_IO_PRIORITY_HINT_INFO;
BOOL

SetFileInformationByHandle(
      HANDLE hFile,
      FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
      LPVOID lpFileInformation,
      DWORD dwBufferSize
);
BOOL

GetFileInformationByHandleEx(
      HANDLE hFile,
      FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
     LPVOID lpFileInformation,
      DWORD dwBufferSize
);
typedef enum _FILE_ID_TYPE {
      FileIdType,
      ObjectIdType,
      MaximumFileIdType
} FILE_ID_TYPE, *PFILE_ID_TYPE;
typedef struct FILE_ID_DESCRIPTOR {
    DWORD dwSize;
    FILE_ID_TYPE Type;
    union {
        LARGE_INTEGER FileId;
        GUID ObjectId;
    };
} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
HANDLE

OpenFileById (
         HANDLE hVolumeHint,
         LPFILE_ID_DESCRIPTOR lpFileId,
         DWORD dwDesiredAccess,
         DWORD dwShareMode,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         DWORD dwFlagsAndAttributes
    );
BOOLEAN

CreateSymbolicLinkA (
     LPCSTR lpSymlinkFileName,
     LPCSTR lpTargetFileName,
     DWORD dwFlags
    );
BOOLEAN

CreateSymbolicLinkW (
     LPCWSTR lpSymlinkFileName,
     LPCWSTR lpTargetFileName,
     DWORD dwFlags
    );
BOOLEAN

CreateSymbolicLinkTransactedA (
         LPCSTR lpSymlinkFileName,
         LPCSTR lpTargetFileName,
         DWORD dwFlags,
         HANDLE hTransaction
    );
BOOLEAN

CreateSymbolicLinkTransactedW (
         LPCWSTR lpSymlinkFileName,
         LPCWSTR lpTargetFileName,
         DWORD dwFlags,
         HANDLE hTransaction
    );
DWORD

GetFinalPathNameByHandleA (
     HANDLE hFile,
     LPSTR lpszFilePath,
     DWORD cchFilePath,
     DWORD dwFlags
);
DWORD

GetFinalPathNameByHandleW (
     HANDLE hFile,
     LPWSTR lpszFilePath,
     DWORD cchFilePath,
     DWORD dwFlags
);

BOOL

QueryActCtxSettingsW(
          DWORD dwFlags,
          HANDLE hActCtx,
          PCWSTR settingsNameSpace,
              PCWSTR settingName,
     PWSTR pvBuffer,
          SIZE_T dwBuffer,
     SIZE_T *pdwWrittenOrRequired
    );
typedef struct _DRAWPATRECT {
        POINT ptPosition;
        POINT ptSize;
        WORD wStyle;
        WORD wPattern;
} DRAWPATRECT, *PDRAWPATRECT;
typedef struct _PSINJECTDATA {
    DWORD   DataBytes;
    WORD    InjectionPoint;
    WORD    PageNumber;
} PSINJECTDATA, *PPSINJECTDATA;
typedef struct _PSFEATURE_OUTPUT {
    BOOL bPageIndependent;
    BOOL bSetPageDevice;
} PSFEATURE_OUTPUT, *PPSFEATURE_OUTPUT;
typedef struct _PSFEATURE_CUSTPAPER {
    LONG lOrientation;
    LONG lWidth;
    LONG lHeight;
    LONG lWidthOffset;
    LONG lHeightOffset;
} PSFEATURE_CUSTPAPER, *PPSFEATURE_CUSTPAPER;
typedef struct  tagXFORM
  {
    FLOAT   eM11;
    FLOAT   eM12;
    FLOAT   eM21;
    FLOAT   eM22;
    FLOAT   eDx;
    FLOAT   eDy;
  } XFORM, *PXFORM,  *LPXFORM;
typedef struct tagBITMAP
  {
    LONG        bmType;
    LONG        bmWidth;
    LONG        bmHeight;
    LONG        bmWidthBytes;
    WORD        bmPlanes;
    WORD        bmBitsPixel;
    LPVOID      bmBits;
  } BITMAP, *PBITMAP,  *NPBITMAP,  *LPBITMAP;
typedef struct tagRGBTRIPLE {
        BYTE    rgbtBlue;
        BYTE    rgbtGreen;
        BYTE    rgbtRed;
} RGBTRIPLE, *PRGBTRIPLE,  *NPRGBTRIPLE,  *LPRGBTRIPLE;
typedef struct tagRGBQUAD {
        BYTE    rgbBlue;
        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
} RGBQUAD;
typedef RGBQUAD * LPRGBQUAD;
typedef LONG   LCSCSTYPE;
typedef LONG    LCSGAMUTMATCH;
typedef long            FXPT16DOT16,  *LPFXPT16DOT16;
typedef long            FXPT2DOT30,  *LPFXPT2DOT30;
typedef struct tagCIEXYZ
{
        FXPT2DOT30 ciexyzX;
        FXPT2DOT30 ciexyzY;
        FXPT2DOT30 ciexyzZ;
} CIEXYZ;
typedef CIEXYZ   *LPCIEXYZ;
typedef struct tagICEXYZTRIPLE
{
        CIEXYZ  ciexyzRed;
        CIEXYZ  ciexyzGreen;
        CIEXYZ  ciexyzBlue;
} CIEXYZTRIPLE;
typedef CIEXYZTRIPLE     *LPCIEXYZTRIPLE;
typedef struct tagLOGCOLORSPACEA {
    DWORD lcsSignature;
    DWORD lcsVersion;
    DWORD lcsSize;
    LCSCSTYPE lcsCSType;
    LCSGAMUTMATCH lcsIntent;
    CIEXYZTRIPLE lcsEndpoints;
    DWORD lcsGammaRed;
    DWORD lcsGammaGreen;
    DWORD lcsGammaBlue;
    CHAR   lcsFilename[260];
} LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
typedef struct tagLOGCOLORSPACEW {
    DWORD lcsSignature;
    DWORD lcsVersion;
    DWORD lcsSize;
    LCSCSTYPE lcsCSType;
    LCSGAMUTMATCH lcsIntent;
    CIEXYZTRIPLE lcsEndpoints;
    DWORD lcsGammaRed;
    DWORD lcsGammaGreen;
    DWORD lcsGammaBlue;
    WCHAR  lcsFilename[260];
} LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
typedef LOGCOLORSPACEA LOGCOLORSPACE;
typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
typedef struct tagBITMAPCOREHEADER {
        DWORD   bcSize;
        WORD    bcWidth;
        WORD    bcHeight;
        WORD    bcPlanes;
        WORD    bcBitCount;
} BITMAPCOREHEADER,  *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER;
typedef struct tagBITMAPINFOHEADER{
        DWORD      biSize;
        LONG       biWidth;
        LONG       biHeight;
        WORD       biPlanes;
        WORD       biBitCount;
        DWORD      biCompression;
        DWORD      biSizeImage;
        LONG       biXPelsPerMeter;
        LONG       biYPelsPerMeter;
        DWORD      biClrUsed;
        DWORD      biClrImportant;
} BITMAPINFOHEADER,  *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
typedef struct {
        DWORD        bV4Size;
        LONG         bV4Width;
        LONG         bV4Height;
        WORD         bV4Planes;
        WORD         bV4BitCount;
        DWORD        bV4V4Compression;
        DWORD        bV4SizeImage;
        LONG         bV4XPelsPerMeter;
        LONG         bV4YPelsPerMeter;
        DWORD        bV4ClrUsed;
        DWORD        bV4ClrImportant;
        DWORD        bV4RedMask;
        DWORD        bV4GreenMask;
        DWORD        bV4BlueMask;
        DWORD        bV4AlphaMask;
        DWORD        bV4CSType;
        CIEXYZTRIPLE bV4Endpoints;
        DWORD        bV4GammaRed;
        DWORD        bV4GammaGreen;
        DWORD        bV4GammaBlue;
} BITMAPV4HEADER,  *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
typedef struct {
        DWORD        bV5Size;
        LONG         bV5Width;
        LONG         bV5Height;
        WORD         bV5Planes;
        WORD         bV5BitCount;
        DWORD        bV5Compression;
        DWORD        bV5SizeImage;
        LONG         bV5XPelsPerMeter;
        LONG         bV5YPelsPerMeter;
        DWORD        bV5ClrUsed;
        DWORD        bV5ClrImportant;
        DWORD        bV5RedMask;
        DWORD        bV5GreenMask;
        DWORD        bV5BlueMask;
        DWORD        bV5AlphaMask;
        DWORD        bV5CSType;
        CIEXYZTRIPLE bV5Endpoints;
        DWORD        bV5GammaRed;
        DWORD        bV5GammaGreen;
        DWORD        bV5GammaBlue;
        DWORD        bV5Intent;
        DWORD        bV5ProfileData;
        DWORD        bV5ProfileSize;
        DWORD        bV5Reserved;
} BITMAPV5HEADER,  *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER    bmiHeader;
    RGBQUAD             bmiColors[1];
} BITMAPINFO,  *LPBITMAPINFO, *PBITMAPINFO;
typedef struct tagBITMAPCOREINFO {
    BITMAPCOREHEADER    bmciHeader;
    RGBTRIPLE           bmciColors[1];
} BITMAPCOREINFO,  *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
typedef struct tagBITMAPFILEHEADER {
        WORD    bfType;
        DWORD   bfSize;
        WORD    bfReserved1;
        WORD    bfReserved2;
        DWORD   bfOffBits;
} BITMAPFILEHEADER,  *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
typedef struct tagFONTSIGNATURE
{
    DWORD fsUsb[4];
    DWORD fsCsb[2];
} FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE;
typedef struct tagCHARSETINFO
{
    UINT ciCharset;
    UINT ciACP;
    FONTSIGNATURE fs;
} CHARSETINFO, *PCHARSETINFO,  *NPCHARSETINFO,  *LPCHARSETINFO;
typedef struct tagLOCALESIGNATURE
{
    DWORD lsUsb[4];
    DWORD lsCsbDefault[2];
    DWORD lsCsbSupported[2];
} LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE;
typedef struct tagHANDLETABLE
  {
    HGDIOBJ     objectHandle[1];
  } HANDLETABLE, *PHANDLETABLE,  *LPHANDLETABLE;
typedef struct tagMETARECORD
  {
    DWORD       rdSize;
    WORD        rdFunction;
    WORD        rdParm[1];
  } METARECORD;
typedef struct tagMETARECORD  *PMETARECORD;
typedef struct tagMETARECORD   *LPMETARECORD;
typedef struct tagMETAFILEPICT
  {
    LONG        mm;
    LONG        xExt;
    LONG        yExt;
    HMETAFILE   hMF;
  } METAFILEPICT,  *LPMETAFILEPICT;
typedef struct tagMETAHEADER
{
    WORD        mtType;
    WORD        mtHeaderSize;
    WORD        mtVersion;
    DWORD       mtSize;
    WORD        mtNoObjects;
    DWORD       mtMaxRecord;
    WORD        mtNoParameters;
} METAHEADER;
typedef struct tagMETAHEADER  *PMETAHEADER;
typedef struct tagMETAHEADER   *LPMETAHEADER;
typedef struct tagENHMETARECORD
{
    DWORD   iType;
    DWORD   nSize;
    DWORD   dParm[1];
} ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
typedef struct tagENHMETAHEADER
{
    DWORD   iType;
    DWORD   nSize;
    RECTL   rclBounds;
    RECTL   rclFrame;
    DWORD   dSignature;
    DWORD   nVersion;
    DWORD   nBytes;
    DWORD   nRecords;
    WORD    nHandles;
    WORD    sReserved;
    DWORD   nDescription;
    DWORD   offDescription;
    DWORD   nPalEntries;
    SIZEL   szlDevice;
    SIZEL   szlMillimeters;
    DWORD   cbPixelFormat;
    DWORD   offPixelFormat;
    DWORD   bOpenGL;
    SIZEL   szlMicrometers;
} ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
    typedef BYTE BCHAR;
typedef struct tagTEXTMETRICA
{
    LONG        tmHeight;
    LONG        tmAscent;
    LONG        tmDescent;
    LONG        tmInternalLeading;
    LONG        tmExternalLeading;
    LONG        tmAveCharWidth;
    LONG        tmMaxCharWidth;
    LONG        tmWeight;
    LONG        tmOverhang;
    LONG        tmDigitizedAspectX;
    LONG        tmDigitizedAspectY;
    BYTE        tmFirstChar;
    BYTE        tmLastChar;
    BYTE        tmDefaultChar;
    BYTE        tmBreakChar;
    BYTE        tmItalic;
    BYTE        tmUnderlined;
    BYTE        tmStruckOut;
    BYTE        tmPitchAndFamily;
    BYTE        tmCharSet;
} TEXTMETRICA, *PTEXTMETRICA,  *NPTEXTMETRICA,  *LPTEXTMETRICA;
typedef struct tagTEXTMETRICW
{
    LONG        tmHeight;
    LONG        tmAscent;
    LONG        tmDescent;
    LONG        tmInternalLeading;
    LONG        tmExternalLeading;
    LONG        tmAveCharWidth;
    LONG        tmMaxCharWidth;
    LONG        tmWeight;
    LONG        tmOverhang;
    LONG        tmDigitizedAspectX;
    LONG        tmDigitizedAspectY;
    WCHAR       tmFirstChar;
    WCHAR       tmLastChar;
    WCHAR       tmDefaultChar;
    WCHAR       tmBreakChar;
    BYTE        tmItalic;
    BYTE        tmUnderlined;
    BYTE        tmStruckOut;
    BYTE        tmPitchAndFamily;
    BYTE        tmCharSet;
} TEXTMETRICW, *PTEXTMETRICW,  *NPTEXTMETRICW,  *LPTEXTMETRICW;
typedef TEXTMETRICA TEXTMETRIC;
typedef PTEXTMETRICA PTEXTMETRIC;
typedef NPTEXTMETRICA NPTEXTMETRIC;
typedef LPTEXTMETRICA LPTEXTMETRIC;
typedef struct tagNEWTEXTMETRICA
{
    LONG        tmHeight;
    LONG        tmAscent;
    LONG        tmDescent;
    LONG        tmInternalLeading;
    LONG        tmExternalLeading;
    LONG        tmAveCharWidth;
    LONG        tmMaxCharWidth;
    LONG        tmWeight;
    LONG        tmOverhang;
    LONG        tmDigitizedAspectX;
    LONG        tmDigitizedAspectY;
    BYTE        tmFirstChar;
    BYTE        tmLastChar;
    BYTE        tmDefaultChar;
    BYTE        tmBreakChar;
    BYTE        tmItalic;
    BYTE        tmUnderlined;
    BYTE        tmStruckOut;
    BYTE        tmPitchAndFamily;
    BYTE        tmCharSet;
    DWORD   ntmFlags;
    UINT    ntmSizeEM;
    UINT    ntmCellHeight;
    UINT    ntmAvgWidth;
} NEWTEXTMETRICA, *PNEWTEXTMETRICA,  *NPNEWTEXTMETRICA,  *LPNEWTEXTMETRICA;
typedef struct tagNEWTEXTMETRICW
{
    LONG        tmHeight;
    LONG        tmAscent;
    LONG        tmDescent;
    LONG        tmInternalLeading;
    LONG        tmExternalLeading;
    LONG        tmAveCharWidth;
    LONG        tmMaxCharWidth;
    LONG        tmWeight;
    LONG        tmOverhang;
    LONG        tmDigitizedAspectX;
    LONG        tmDigitizedAspectY;
    WCHAR       tmFirstChar;
    WCHAR       tmLastChar;
    WCHAR       tmDefaultChar;
    WCHAR       tmBreakChar;
    BYTE        tmItalic;
    BYTE        tmUnderlined;
    BYTE        tmStruckOut;
    BYTE        tmPitchAndFamily;
    BYTE        tmCharSet;
    DWORD   ntmFlags;
    UINT    ntmSizeEM;
    UINT    ntmCellHeight;
    UINT    ntmAvgWidth;
} NEWTEXTMETRICW, *PNEWTEXTMETRICW,  *NPNEWTEXTMETRICW,  *LPNEWTEXTMETRICW;
typedef NEWTEXTMETRICA NEWTEXTMETRIC;
typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
typedef struct tagNEWTEXTMETRICEXA
{
    NEWTEXTMETRICA  ntmTm;
    FONTSIGNATURE   ntmFontSig;
}NEWTEXTMETRICEXA;
typedef struct tagNEWTEXTMETRICEXW
{
    NEWTEXTMETRICW  ntmTm;
    FONTSIGNATURE   ntmFontSig;
}NEWTEXTMETRICEXW;
typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
typedef struct tagPELARRAY
  {
    LONG        paXCount;
    LONG        paYCount;
    LONG        paXExt;
    LONG        paYExt;
    BYTE        paRGBs;
  } PELARRAY, *PPELARRAY,  *NPPELARRAY,  *LPPELARRAY;
typedef struct tagLOGBRUSH
  {
    UINT        lbStyle;
    COLORREF    lbColor;
    ULONG_PTR    lbHatch;
  } LOGBRUSH, *PLOGBRUSH,  *NPLOGBRUSH,  *LPLOGBRUSH;
typedef struct tagLOGBRUSH32
  {
    UINT        lbStyle;
    COLORREF    lbColor;
    ULONG       lbHatch;
  } LOGBRUSH32, *PLOGBRUSH32,  *NPLOGBRUSH32,  *LPLOGBRUSH32;
typedef LOGBRUSH            PATTERN;
typedef PATTERN             *PPATTERN;
typedef PATTERN         *NPPATTERN;
typedef PATTERN          *LPPATTERN;
typedef struct tagLOGPEN
  {
    UINT        lopnStyle;
    POINT       lopnWidth;
    COLORREF    lopnColor;
  } LOGPEN, *PLOGPEN,  *NPLOGPEN,  *LPLOGPEN;
typedef struct tagEXTLOGPEN {
    DWORD       elpPenStyle;
    DWORD       elpWidth;
    UINT        elpBrushStyle;
    COLORREF    elpColor;
    ULONG_PTR    elpHatch;
    DWORD       elpNumEntries;
    DWORD       elpStyleEntry[1];
} EXTLOGPEN, *PEXTLOGPEN,  *NPEXTLOGPEN,  *LPEXTLOGPEN;
typedef struct tagPALETTEENTRY {
    BYTE        peRed;
    BYTE        peGreen;
    BYTE        peBlue;
    BYTE        peFlags;
} PALETTEENTRY, *PPALETTEENTRY,  *LPPALETTEENTRY;
typedef struct tagLOGPALETTE {
    WORD        palVersion;
    WORD        palNumEntries;
     PALETTEENTRY        palPalEntry[1];
} LOGPALETTE, *PLOGPALETTE,  *NPLOGPALETTE,  *LPLOGPALETTE;
typedef struct tagLOGFONTA
{
    LONG      lfHeight;
    LONG      lfWidth;
    LONG      lfEscapement;
    LONG      lfOrientation;
    LONG      lfWeight;
    BYTE      lfItalic;
    BYTE      lfUnderline;
    BYTE      lfStrikeOut;
    BYTE      lfCharSet;
    BYTE      lfOutPrecision;
    BYTE      lfClipPrecision;
    BYTE      lfQuality;
    BYTE      lfPitchAndFamily;
    CHAR      lfFaceName[32];
} LOGFONTA, *PLOGFONTA,  *NPLOGFONTA,  *LPLOGFONTA;
typedef struct tagLOGFONTW
{
    LONG      lfHeight;
    LONG      lfWidth;
    LONG      lfEscapement;
    LONG      lfOrientation;
    LONG      lfWeight;
    BYTE      lfItalic;
    BYTE      lfUnderline;
    BYTE      lfStrikeOut;
    BYTE      lfCharSet;
    BYTE      lfOutPrecision;
    BYTE      lfClipPrecision;
    BYTE      lfQuality;
    BYTE      lfPitchAndFamily;
    WCHAR     lfFaceName[32];
} LOGFONTW, *PLOGFONTW,  *NPLOGFONTW,  *LPLOGFONTW;
typedef LOGFONTA LOGFONT;
typedef PLOGFONTA PLOGFONT;
typedef NPLOGFONTA NPLOGFONT;
typedef LPLOGFONTA LPLOGFONT;
typedef struct tagENUMLOGFONTA
{
    LOGFONTA elfLogFont;
    BYTE     elfFullName[64];
    BYTE     elfStyle[32];
} ENUMLOGFONTA, * LPENUMLOGFONTA;
typedef struct tagENUMLOGFONTW
{
    LOGFONTW elfLogFont;
    WCHAR    elfFullName[64];
    WCHAR    elfStyle[32];
} ENUMLOGFONTW, * LPENUMLOGFONTW;
typedef ENUMLOGFONTA ENUMLOGFONT;
typedef LPENUMLOGFONTA LPENUMLOGFONT;
typedef struct tagENUMLOGFONTEXA
{
    LOGFONTA    elfLogFont;
    BYTE        elfFullName[64];
    BYTE        elfStyle[32];
    BYTE        elfScript[32];
} ENUMLOGFONTEXA,  *LPENUMLOGFONTEXA;
typedef struct tagENUMLOGFONTEXW
{
    LOGFONTW    elfLogFont;
    WCHAR       elfFullName[64];
    WCHAR       elfStyle[32];
    WCHAR       elfScript[32];
} ENUMLOGFONTEXW,  *LPENUMLOGFONTEXW;
typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
typedef struct tagPANOSE
{
    BYTE    bFamilyType;
    BYTE    bSerifStyle;
    BYTE    bWeight;
    BYTE    bProportion;
    BYTE    bContrast;
    BYTE    bStrokeVariation;
    BYTE    bArmStyle;
    BYTE    bLetterform;
    BYTE    bMidline;
    BYTE    bXHeight;
} PANOSE, * LPPANOSE;
typedef struct tagEXTLOGFONTA {
    LOGFONTA    elfLogFont;
    BYTE        elfFullName[64];
    BYTE        elfStyle[32];
    DWORD       elfVersion;
    DWORD       elfStyleSize;
    DWORD       elfMatch;
    DWORD       elfReserved;
    BYTE        elfVendorId[4];
    DWORD       elfCulture;
    PANOSE      elfPanose;
} EXTLOGFONTA, *PEXTLOGFONTA,  *NPEXTLOGFONTA,  *LPEXTLOGFONTA;
typedef struct tagEXTLOGFONTW {
    LOGFONTW    elfLogFont;
    WCHAR       elfFullName[64];
    WCHAR       elfStyle[32];
    DWORD       elfVersion;
    DWORD       elfStyleSize;
    DWORD       elfMatch;
    DWORD       elfReserved;
    BYTE        elfVendorId[4];
    DWORD       elfCulture;
    PANOSE      elfPanose;
} EXTLOGFONTW, *PEXTLOGFONTW,  *NPEXTLOGFONTW,  *LPEXTLOGFONTW;
typedef EXTLOGFONTA EXTLOGFONT;
typedef PEXTLOGFONTA PEXTLOGFONT;
typedef NPEXTLOGFONTA NPEXTLOGFONT;
typedef LPEXTLOGFONTA LPEXTLOGFONT;
typedef struct _devicemodeA {
    BYTE   dmDeviceName[32];
    WORD dmSpecVersion;
    WORD dmDriverVersion;
    WORD dmSize;
    WORD dmDriverExtra;
    DWORD dmFields;
    union {
      struct {
        short dmOrientation;
        short dmPaperSize;
        short dmPaperLength;
        short dmPaperWidth;
        short dmScale;
        short dmCopies;
        short dmDefaultSource;
        short dmPrintQuality;
      };
      struct {
        POINTL dmPosition;
        DWORD  dmDisplayOrientation;
        DWORD  dmDisplayFixedOutput;
      };
    };
    short dmColor;
    short dmDuplex;
    short dmYResolution;
    short dmTTOption;
    short dmCollate;
    BYTE   dmFormName[32];
    WORD   dmLogPixels;
    DWORD  dmBitsPerPel;
    DWORD  dmPelsWidth;
    DWORD  dmPelsHeight;
    union {
        DWORD  dmDisplayFlags;
        DWORD  dmNup;
    };
    DWORD  dmDisplayFrequency;
    DWORD  dmICMMethod;
    DWORD  dmICMIntent;
    DWORD  dmMediaType;
    DWORD  dmDitherType;
    DWORD  dmReserved1;
    DWORD  dmReserved2;
    DWORD  dmPanningWidth;
    DWORD  dmPanningHeight;
} DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;
typedef struct _devicemodeW {
    WCHAR  dmDeviceName[32];
    WORD dmSpecVersion;
    WORD dmDriverVersion;
    WORD dmSize;
    WORD dmDriverExtra;
    DWORD dmFields;
    union {
      struct {
        short dmOrientation;
        short dmPaperSize;
        short dmPaperLength;
        short dmPaperWidth;
        short dmScale;
        short dmCopies;
        short dmDefaultSource;
        short dmPrintQuality;
      };
      struct {
        POINTL dmPosition;
        DWORD  dmDisplayOrientation;
        DWORD  dmDisplayFixedOutput;
      };
    };
    short dmColor;
    short dmDuplex;
    short dmYResolution;
    short dmTTOption;
    short dmCollate;
    WCHAR  dmFormName[32];
    WORD   dmLogPixels;
    DWORD  dmBitsPerPel;
    DWORD  dmPelsWidth;
    DWORD  dmPelsHeight;
    union {
        DWORD  dmDisplayFlags;
        DWORD  dmNup;
    };
    DWORD  dmDisplayFrequency;
    DWORD  dmICMMethod;
    DWORD  dmICMIntent;
    DWORD  dmMediaType;
    DWORD  dmDitherType;
    DWORD  dmReserved1;
    DWORD  dmReserved2;
    DWORD  dmPanningWidth;
    DWORD  dmPanningHeight;
} DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;
typedef DEVMODEA DEVMODE;
typedef PDEVMODEA PDEVMODE;
typedef NPDEVMODEA NPDEVMODE;
typedef LPDEVMODEA LPDEVMODE;
typedef struct _DISPLAY_DEVICEA {
    DWORD  cb;
    CHAR   DeviceName[32];
    CHAR   DeviceString[128];
    DWORD  StateFlags;
    CHAR   DeviceID[128];
    CHAR   DeviceKey[128];
} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
typedef struct _DISPLAY_DEVICEW {
    DWORD  cb;
    WCHAR  DeviceName[32];
    WCHAR  DeviceString[128];
    DWORD  StateFlags;
    WCHAR  DeviceID[128];
    WCHAR  DeviceKey[128];
} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
typedef struct _RGNDATAHEADER {
    DWORD   dwSize;
    DWORD   iType;
    DWORD   nCount;
    DWORD   nRgnSize;
    RECT    rcBound;
} RGNDATAHEADER, *PRGNDATAHEADER;
typedef struct _RGNDATA {
    RGNDATAHEADER   rdh;
    char            Buffer[1];
} RGNDATA, *PRGNDATA,  *NPRGNDATA,  *LPRGNDATA;
typedef struct _ABC {
    int     abcA;
    UINT    abcB;
    int     abcC;
} ABC, *PABC,  *NPABC,  *LPABC;
typedef struct _ABCFLOAT {
    FLOAT   abcfA;
    FLOAT   abcfB;
    FLOAT   abcfC;
} ABCFLOAT, *PABCFLOAT,  *NPABCFLOAT,  *LPABCFLOAT;
typedef struct _OUTLINETEXTMETRICA {
    UINT    otmSize;
    TEXTMETRICA otmTextMetrics;
    BYTE    otmFiller;
    PANOSE  otmPanoseNumber;
    UINT    otmfsSelection;
    UINT    otmfsType;
     int    otmsCharSlopeRise;
     int    otmsCharSlopeRun;
     int    otmItalicAngle;
    UINT    otmEMSquare;
     int    otmAscent;
     int    otmDescent;
    UINT    otmLineGap;
    UINT    otmsCapEmHeight;
    UINT    otmsXHeight;
    RECT    otmrcFontBox;
     int    otmMacAscent;
     int    otmMacDescent;
    UINT    otmMacLineGap;
    UINT    otmusMinimumPPEM;
    POINT   otmptSubscriptSize;
    POINT   otmptSubscriptOffset;
    POINT   otmptSuperscriptSize;
    POINT   otmptSuperscriptOffset;
    UINT    otmsStrikeoutSize;
     int    otmsStrikeoutPosition;
     int    otmsUnderscoreSize;
     int    otmsUnderscorePosition;
    PSTR    otmpFamilyName;
    PSTR    otmpFaceName;
    PSTR    otmpStyleName;
    PSTR    otmpFullName;
} OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA,  *NPOUTLINETEXTMETRICA,  *LPOUTLINETEXTMETRICA;
typedef struct _OUTLINETEXTMETRICW {
    UINT    otmSize;
    TEXTMETRICW otmTextMetrics;
    BYTE    otmFiller;
    PANOSE  otmPanoseNumber;
    UINT    otmfsSelection;
    UINT    otmfsType;
     int    otmsCharSlopeRise;
     int    otmsCharSlopeRun;
     int    otmItalicAngle;
    UINT    otmEMSquare;
     int    otmAscent;
     int    otmDescent;
    UINT    otmLineGap;
    UINT    otmsCapEmHeight;
    UINT    otmsXHeight;
    RECT    otmrcFontBox;
     int    otmMacAscent;
     int    otmMacDescent;
    UINT    otmMacLineGap;
    UINT    otmusMinimumPPEM;
    POINT   otmptSubscriptSize;
    POINT   otmptSubscriptOffset;
    POINT   otmptSuperscriptSize;
    POINT   otmptSuperscriptOffset;
    UINT    otmsStrikeoutSize;
     int    otmsStrikeoutPosition;
     int    otmsUnderscoreSize;
     int    otmsUnderscorePosition;
    PSTR    otmpFamilyName;
    PSTR    otmpFaceName;
    PSTR    otmpStyleName;
    PSTR    otmpFullName;
} OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW,  *NPOUTLINETEXTMETRICW,  *LPOUTLINETEXTMETRICW;
typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
typedef struct tagPOLYTEXTA
{
    int       x;
    int       y;
    UINT      n;
    LPCSTR    lpstr;
    UINT      uiFlags;
    RECT      rcl;
    int      *pdx;
} POLYTEXTA, *PPOLYTEXTA,  *NPPOLYTEXTA,  *LPPOLYTEXTA;
typedef struct tagPOLYTEXTW
{
    int       x;
    int       y;
    UINT      n;
    LPCWSTR   lpstr;
    UINT      uiFlags;
    RECT      rcl;
    int      *pdx;
} POLYTEXTW, *PPOLYTEXTW,  *NPPOLYTEXTW,  *LPPOLYTEXTW;
typedef POLYTEXTA POLYTEXT;
typedef PPOLYTEXTA PPOLYTEXT;
typedef NPPOLYTEXTA NPPOLYTEXT;
typedef LPPOLYTEXTA LPPOLYTEXT;
typedef struct _FIXED {
    WORD    fract;
    short   value;
} FIXED;
typedef struct _MAT2 {
     FIXED  eM11;
     FIXED  eM12;
     FIXED  eM21;
     FIXED  eM22;
} MAT2,  *LPMAT2;
typedef struct _GLYPHMETRICS {
    UINT    gmBlackBoxX;
    UINT    gmBlackBoxY;
    POINT   gmptGlyphOrigin;
    short   gmCellIncX;
    short   gmCellIncY;
} GLYPHMETRICS,  *LPGLYPHMETRICS;
typedef struct tagPOINTFX
{
    FIXED x;
    FIXED y;
} POINTFX, * LPPOINTFX;
typedef struct tagTTPOLYCURVE
{
    WORD    wType;
    WORD    cpfx;
    POINTFX apfx[1];
} TTPOLYCURVE, * LPTTPOLYCURVE;
typedef struct tagTTPOLYGONHEADER
{
    DWORD   cb;
    DWORD   dwType;
    POINTFX pfxStart;
} TTPOLYGONHEADER, * LPTTPOLYGONHEADER;
typedef struct tagGCP_RESULTSA
    {
    DWORD   lStructSize;
    LPSTR     lpOutString;
    UINT  *lpOrder;
    int   *lpDx;
    int   *lpCaretPos;
    LPSTR   lpClass;
    LPWSTR  lpGlyphs;
    UINT    nGlyphs;
    int     nMaxFit;
    } GCP_RESULTSA, * LPGCP_RESULTSA;
typedef struct tagGCP_RESULTSW
    {
    DWORD   lStructSize;
    LPWSTR    lpOutString;
    UINT  *lpOrder;
    int   *lpDx;
    int   *lpCaretPos;
    LPSTR   lpClass;
    LPWSTR  lpGlyphs;
    UINT    nGlyphs;
    int     nMaxFit;
    } GCP_RESULTSW, * LPGCP_RESULTSW;
typedef GCP_RESULTSA GCP_RESULTS;
typedef LPGCP_RESULTSA LPGCP_RESULTS;
typedef struct _RASTERIZER_STATUS {
    short   nSize;
    short   wFlags;
    short   nLanguageID;
} RASTERIZER_STATUS,  *LPRASTERIZER_STATUS;
typedef struct tagPIXELFORMATDESCRIPTOR
{
    WORD  nSize;
    WORD  nVersion;
    DWORD dwFlags;
    BYTE  iPixelType;
    BYTE  cColorBits;
    BYTE  cRedBits;
    BYTE  cRedShift;
    BYTE  cGreenBits;
    BYTE  cGreenShift;
    BYTE  cBlueBits;
    BYTE  cBlueShift;
    BYTE  cAlphaBits;
    BYTE  cAlphaShift;
    BYTE  cAccumBits;
    BYTE  cAccumRedBits;
    BYTE  cAccumGreenBits;
    BYTE  cAccumBlueBits;
    BYTE  cAccumAlphaBits;
    BYTE  cDepthBits;
    BYTE  cStencilBits;
    BYTE  cAuxBuffers;
    BYTE  iLayerType;
    BYTE  bReserved;
    DWORD dwLayerMask;
    DWORD dwVisibleMask;
    DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR,  *LPPIXELFORMATDESCRIPTOR;
typedef int (* OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM);
typedef int (* OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM);
typedef OLDFONTENUMPROCA    FONTENUMPROCA;
typedef OLDFONTENUMPROCW    FONTENUMPROCW;
typedef FONTENUMPROCA FONTENUMPROC;
typedef int (* GOBJENUMPROC)(LPVOID, LPARAM);
typedef void (* LINEDDAPROC)(int, int, LPARAM);
 int  AddFontResourceA( LPCSTR);
 int  AddFontResourceW( LPCWSTR);
  BOOL   AnimatePalette(  HPALETTE hPal,  UINT iStartIndex,   UINT cEntries,  const PALETTEENTRY * ppe);
  BOOL   Arc(  HDC hdc,  int x1,  int y1,  int x2,  int y2,  int x3,  int y3,  int x4,  int y4);
  BOOL   BitBlt(  HDC hdc,  int x,  int y,  int cx,  int cy,  HDC hdcSrc,  int x1,  int y1,  DWORD rop);
 BOOL   CancelDC(  HDC hdc);
  BOOL   Chord(  HDC hdc,  int x1,  int y1,  int x2,  int y2,  int x3,  int y3,  int x4,  int y4);
 int    ChoosePixelFormat(  HDC hdc,  const PIXELFORMATDESCRIPTOR *ppfd);
 HMETAFILE   CloseMetaFile(  HDC hdc);
 int      CombineRgn(  HRGN hrgnDst,  HRGN hrgnSrc1,  HRGN hrgnSrc2,  int iMode);
 HMETAFILE  CopyMetaFileA(  HMETAFILE,  LPCSTR);
 HMETAFILE  CopyMetaFileW(  HMETAFILE,  LPCWSTR);
  HBITMAP  CreateBitmap(  int nWidth,  int nHeight,  UINT nPlanes,  UINT nBitCount,  const void *lpBits);
  HBITMAP  CreateBitmapIndirect(  const BITMAP *pbm);
  HBRUSH   CreateBrushIndirect(  const LOGBRUSH *plbrush);
 HBITMAP  CreateCompatibleBitmap(  HDC hdc,  int cx,  int cy);
 HBITMAP  CreateDiscardableBitmap(  HDC hdc,  int cx,  int cy);
 HDC      CreateCompatibleDC(  HDC hdc);
 HDC      CreateDCA(  LPCSTR pwszDriver,  LPCSTR pwszDevice,  LPCSTR pszPort,  const DEVMODEA * pdm);
 HDC      CreateDCW(  LPCWSTR pwszDriver,  LPCWSTR pwszDevice,  LPCWSTR pszPort,  const DEVMODEW * pdm);
 HBITMAP  CreateDIBitmap(  HDC hdc,  const BITMAPINFOHEADER *pbmih,  DWORD flInit,  const void *pjBits,  const BITMAPINFO *pbmi,  UINT iUsage);
 HBRUSH   CreateDIBPatternBrush(  HGLOBAL h,  UINT iUsage);
  HBRUSH   CreateDIBPatternBrushPt(  const void *lpPackedDIB,  UINT iUsage);
 HRGN     CreateEllipticRgn(  int x1,  int y1,  int x2,  int y2);
 HRGN     CreateEllipticRgnIndirect(  const RECT *lprect);
  HFONT    CreateFontIndirectA(  const LOGFONTA *lplf);
  HFONT    CreateFontIndirectW(  const LOGFONTW *lplf);
 HFONT    CreateFontA(  int cHeight,  int cWidth,  int cEscapement,  int cOrientation,  int cWeight,  DWORD bItalic,
                              DWORD bUnderline,  DWORD bStrikeOut,  DWORD iCharSet,  DWORD iOutPrecision,  DWORD iClipPrecision,
                              DWORD iQuality,  DWORD iPitchAndFamily,  LPCSTR pszFaceName);
 HFONT    CreateFontW(  int cHeight,  int cWidth,  int cEscapement,  int cOrientation,  int cWeight,  DWORD bItalic,
                              DWORD bUnderline,  DWORD bStrikeOut,  DWORD iCharSet,  DWORD iOutPrecision,  DWORD iClipPrecision,
                              DWORD iQuality,  DWORD iPitchAndFamily,  LPCWSTR pszFaceName);
 HBRUSH   CreateHatchBrush(  int iHatch,  COLORREF color);
 HDC      CreateICA(  LPCSTR pszDriver,  LPCSTR pszDevice,  LPCSTR pszPort,  const DEVMODEA * pdm);
 HDC      CreateICW(  LPCWSTR pszDriver,  LPCWSTR pszDevice,  LPCWSTR pszPort,  const DEVMODEW * pdm);
 HDC      CreateMetaFileA(  LPCSTR pszFile);
 HDC      CreateMetaFileW(  LPCWSTR pszFile);
  HPALETTE  CreatePalette(  const LOGPALETTE * plpal);
 HPEN     CreatePen(  int iStyle,  int cWidth,  COLORREF color);
  HPEN     CreatePenIndirect(  const LOGPEN *plpen);
 HRGN     CreatePolyPolygonRgn(   const POINT *pptl,
                                                 const INT  *pc,
                                                 int cPoly,
                                                 int iMode);
  HBRUSH   CreatePatternBrush(  HBITMAP hbm);
 HRGN     CreateRectRgn(  int x1,  int y1,  int x2,  int y2);
 HRGN     CreateRectRgnIndirect(  const RECT *lprect);
 HRGN     CreateRoundRectRgn(  int x1,  int y1,  int x2,  int y2,  int w,  int h);
 BOOL     CreateScalableFontResourceA(  DWORD fdwHidden,  LPCSTR lpszFont,  LPCSTR lpszFile,  LPCSTR lpszPath);
 BOOL     CreateScalableFontResourceW(  DWORD fdwHidden,  LPCWSTR lpszFont,  LPCWSTR lpszFile,  LPCWSTR lpszPath);
 HBRUSH   CreateSolidBrush(  COLORREF color);
 BOOL  DeleteDC(  HDC hdc);
 BOOL  DeleteMetaFile(  HMETAFILE hmf);
  BOOL  DeleteObject(  HGDIOBJ ho);
 int   DescribePixelFormat(   HDC hdc,
                                             int iPixelFormat,
                                             UINT nBytes,
                                             LPPIXELFORMATDESCRIPTOR ppfd);
typedef UINT   (* LPFNDEVMODE)(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT);
typedef DWORD  (* LPFNDEVCAPS)(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE);

int

DeviceCapabilitiesA(
                    LPCSTR         pDevice,
                LPCSTR         pPort,
                    WORD             fwCapability,
     LPSTR          pOutput,
                const DEVMODEA   *pDevMode
    );

int

DeviceCapabilitiesW(
                    LPCWSTR         pDevice,
                LPCWSTR         pPort,
                    WORD             fwCapability,
     LPWSTR          pOutput,
                const DEVMODEW   *pDevMode
    );
 int   DrawEscape(    HDC    hdc,
                                     int    iEscape,
                                     int    cjIn,
                                     LPCSTR lpIn);
  BOOL  Ellipse(  HDC hdc,  int left,  int top,   int right,  int bottom);
 int   EnumFontFamiliesExA(  HDC hdc,  LPLOGFONTA lpLogfont,  FONTENUMPROCA lpProc,  LPARAM lParam,  DWORD dwFlags);
 int   EnumFontFamiliesExW(  HDC hdc,  LPLOGFONTW lpLogfont,  FONTENUMPROCW lpProc,  LPARAM lParam,  DWORD dwFlags);
 int   EnumFontFamiliesA(  HDC hdc,  LPCSTR lpLogfont,  FONTENUMPROCA lpProc,  LPARAM lParam);
 int   EnumFontFamiliesW(  HDC hdc,  LPCWSTR lpLogfont,  FONTENUMPROCW lpProc,  LPARAM lParam);
 int   EnumFontsA(  HDC hdc,  LPCSTR lpLogfont,   FONTENUMPROCA lpProc,  LPARAM lParam);
 int   EnumFontsW(  HDC hdc,  LPCWSTR lpLogfont,   FONTENUMPROCW lpProc,  LPARAM lParam);
 int   EnumObjects(  HDC hdc,  int nType,  GOBJENUMPROC lpFunc,  LPARAM lParam);
 BOOL  EqualRgn(  HRGN hrgn1,  HRGN hrgn2);
  int   Escape(    HDC hdc,
                                 int iEscape,
                                 int cjIn,
                                 LPCSTR pvIn,
                                 LPVOID pvOut);
 int   ExtEscape(     HDC hdc,
                                     int iEscape,
                                     int cjInput,
                                     LPCSTR lpInData,
                                     int cjOutput,
                                     LPSTR lpOutData);
  int   ExcludeClipRect(  HDC hdc,  int left,  int top,  int right,  int bottom);
  HRGN  ExtCreateRegion(  const XFORM * lpx,  DWORD nCount,  const RGNDATA * lpData);
  BOOL  ExtFloodFill(  HDC hdc,  int x,  int y,  COLORREF color,  UINT type);
  BOOL  FillRgn(  HDC hdc,  HRGN hrgn,  HBRUSH hbr);
  BOOL  FloodFill(  HDC hdc,  int x,  int y,  COLORREF color);
  BOOL  FrameRgn(  HDC hdc,  HRGN hrgn,  HBRUSH hbr,  int w,  int h);
 int   GetROP2(  HDC hdc);
 BOOL  GetAspectRatioFilterEx(  HDC hdc,  LPSIZE lpsize);
 COLORREF  GetBkColor(  HDC hdc);
 COLORREF  GetDCBrushColor(  HDC hdc);
 COLORREF  GetDCPenColor(  HDC hdc);

int

GetBkMode(
     HDC hdc
    );

LONG

GetBitmapBits(
     HBITMAP hbit,
     LONG cb,
     LPVOID lpvBits
    );
 BOOL   GetBitmapDimensionEx(  HBITMAP hbit,  LPSIZE lpsize);
 UINT   GetBoundsRect(  HDC hdc,  LPRECT lprect,  UINT flags);
 BOOL   GetBrushOrgEx(  HDC hdc,  LPPOINT lppt);
 BOOL   GetCharWidthA(  HDC hdc,  UINT iFirst,  UINT iLast,  LPINT lpBuffer);
 BOOL   GetCharWidthW(  HDC hdc,  UINT iFirst,  UINT iLast,  LPINT lpBuffer);
 BOOL   GetCharWidth32A(  HDC hdc,  UINT iFirst,  UINT iLast,   LPINT lpBuffer);
 BOOL   GetCharWidth32W(  HDC hdc,  UINT iFirst,  UINT iLast,   LPINT lpBuffer);
 BOOL   GetCharWidthFloatA(  HDC hdc,  UINT iFirst,  UINT iLast,  PFLOAT lpBuffer);
 BOOL   GetCharWidthFloatW(  HDC hdc,  UINT iFirst,  UINT iLast,  PFLOAT lpBuffer);
 BOOL   GetCharABCWidthsA(  HDC hdc,
                                             UINT wFirst,
                                             UINT wLast,
                                             LPABC lpABC);
 BOOL   GetCharABCWidthsW(  HDC hdc,
                                             UINT wFirst,
                                             UINT wLast,
                                             LPABC lpABC);
 BOOL   GetCharABCWidthsFloatA(  HDC hdc,  UINT iFirst,  UINT iLast,  LPABCFLOAT lpABC);
 BOOL   GetCharABCWidthsFloatW(  HDC hdc,  UINT iFirst,  UINT iLast,  LPABCFLOAT lpABC);
 int    GetClipBox(  HDC hdc,   LPRECT lprect);
 int    GetClipRgn(  HDC hdc,  HRGN hrgn);
 int    GetMetaRgn(  HDC hdc,  HRGN hrgn);
 HGDIOBJ  GetCurrentObject(  HDC hdc,  UINT type);
 BOOL   GetCurrentPositionEx(  HDC hdc,   LPPOINT lppt);
 int    GetDeviceCaps(  HDC hdc,  int index);
 int    GetDIBits(  HDC hdc,  HBITMAP hbm,  UINT start,  UINT cLines,   LPVOID lpvBits,  LPBITMAPINFO lpbmi,  UINT usage);
 DWORD  GetFontData (     HDC     hdc,
                                         DWORD   dwTable,
                                         DWORD   dwOffset,
                                         PVOID pvBuffer,
                                         DWORD   cjBuffer
                                        );
 DWORD  GetGlyphOutlineA(     HDC hdc,
                                             UINT uChar,
                                             UINT fuFormat,
                                             LPGLYPHMETRICS lpgm,
                                             DWORD cjBuffer,
                                             LPVOID pvBuffer,
                                             const MAT2 *lpmat2
                                        );
 DWORD  GetGlyphOutlineW(     HDC hdc,
                                             UINT uChar,
                                             UINT fuFormat,
                                             LPGLYPHMETRICS lpgm,
                                             DWORD cjBuffer,
                                             LPVOID pvBuffer,
                                             const MAT2 *lpmat2
                                        );
 int    GetGraphicsMode(  HDC hdc);
 int    GetMapMode(  HDC hdc);
 UINT   GetMetaFileBitsEx( HMETAFILE hMF,  UINT cbBuffer,  LPVOID lpData);
 HMETAFILE    GetMetaFileA(  LPCSTR lpName);
 HMETAFILE    GetMetaFileW(  LPCWSTR lpName);
 COLORREF  GetNearestColor(  HDC hdc,  COLORREF color);
 UINT   GetNearestPaletteIndex(  HPALETTE h,  COLORREF color);
 DWORD  GetObjectType(  HGDIOBJ h);
 UINT  GetOutlineTextMetricsA(  HDC hdc,
                                                 UINT cjCopy,
                                                 LPOUTLINETEXTMETRICA potm);
 UINT  GetOutlineTextMetricsW(  HDC hdc,
                                                 UINT cjCopy,
                                                 LPOUTLINETEXTMETRICW potm);
 UINT   GetPaletteEntries(    HPALETTE hpal,
                                             UINT iStart,
                                             UINT cEntries,
                                             LPPALETTEENTRY pPalEntries);
 COLORREF  GetPixel(  HDC hdc,  int x,  int y);
 int    GetPixelFormat(  HDC hdc);
 int    GetPolyFillMode(  HDC hdc);
 BOOL   GetRasterizerCaps(    LPRASTERIZER_STATUS lpraststat,
                                             UINT cjBytes);
 int    GetRandomRgn ( HDC hdc,  HRGN hrgn,  INT i);
 DWORD  GetRegionData(    HRGN hrgn,
                                         DWORD nCount,
                                         LPRGNDATA lpRgnData);
 int    GetRgnBox(  HRGN hrgn,   LPRECT lprc);
 HGDIOBJ  GetStockObject(  int i);
 int    GetStretchBltMode( HDC hdc);

UINT

GetSystemPaletteEntries(
     HDC  hdc,
     UINT iStart,
     UINT cEntries,
     LPPALETTEENTRY pPalEntries
    );
 UINT   GetSystemPaletteUse( HDC hdc);
 int    GetTextCharacterExtra( HDC hdc);
 UINT   GetTextAlign( HDC hdc);
 COLORREF  GetTextColor( HDC hdc);

BOOL

GetTextExtentPointA(
     HDC hdc,
     LPCSTR lpString,
     int c,
     LPSIZE lpsz
    );

BOOL

GetTextExtentPointW(
     HDC hdc,
     LPCWSTR lpString,
     int c,
     LPSIZE lpsz
    );

BOOL

GetTextExtentPoint32A(
     HDC hdc,
     LPCSTR lpString,
     int c,
     LPSIZE psizl
    );

BOOL

GetTextExtentPoint32W(
     HDC hdc,
     LPCWSTR lpString,
     int c,
     LPSIZE psizl
    );

BOOL

GetTextExtentExPointA(
     HDC hdc,
     LPCSTR lpszString,
     int cchString,
     int nMaxExtent,
     LPINT lpnFit,
     LPINT lpnDx,
     LPSIZE lpSize
    );

BOOL

GetTextExtentExPointW(
     HDC hdc,
     LPCWSTR lpszString,
     int cchString,
     int nMaxExtent,
     LPINT lpnFit,
     LPINT lpnDx,
     LPSIZE lpSize
    );
 int  GetTextCharset(  HDC hdc);
 int  GetTextCharsetInfo(  HDC hdc,  LPFONTSIGNATURE lpSig,  DWORD dwFlags);
 BOOL  TranslateCharsetInfo(  DWORD  *lpSrc,   LPCHARSETINFO lpCs,  DWORD dwFlags);
 DWORD  GetFontLanguageInfo(  HDC hdc);
 DWORD  GetCharacterPlacementA(   HDC hdc,  LPCSTR lpString,  int nCount,  int nMexExtent,  LPGCP_RESULTSA lpResults,  DWORD dwFlags);
 DWORD  GetCharacterPlacementW(   HDC hdc,  LPCWSTR lpString,  int nCount,  int nMexExtent,  LPGCP_RESULTSW lpResults,  DWORD dwFlags);
typedef struct tagWCRANGE
{
    WCHAR  wcLow;
    USHORT cGlyphs;
} WCRANGE, *PWCRANGE, *LPWCRANGE;
typedef struct tagGLYPHSET
{
    DWORD    cbThis;
    DWORD    flAccel;
    DWORD    cGlyphsSupported;
    DWORD    cRanges;
    WCRANGE  ranges[1];
} GLYPHSET, *PGLYPHSET,  *LPGLYPHSET;
 DWORD  GetFontUnicodeRanges(  HDC hdc,  LPGLYPHSET lpgs);
 DWORD  GetGlyphIndicesA(  HDC hdc,  LPCSTR lpstr,  int c,  LPWORD pgi,  DWORD fl);
 DWORD  GetGlyphIndicesW(  HDC hdc,  LPCWSTR lpstr,  int c,  LPWORD pgi,  DWORD fl);
 BOOL   GetTextExtentPointI( HDC hdc,  LPWORD pgiIn,  int cgi,  LPSIZE psize);
 BOOL   GetTextExtentExPointI (   HDC hdc,
                                                 LPWORD lpwszString,
                                                 int cwchString,
                                                 int nMaxExtent,
                                                 LPINT lpnFit,
                                                 LPINT lpnDx,
                                                 LPSIZE lpSize
                                                );
 BOOL   GetCharWidthI(    HDC hdc,
                                         UINT giFirst,
                                         UINT cgi,
                                         LPWORD pgi,
                                         LPINT piWidths
                                        );
 BOOL   GetCharABCWidthsI(    HDC    hdc,
                                             UINT   giFirst,
                                             UINT   cgi,
                                             LPWORD pgi,
                                             LPABC  pabc
                                        );
typedef struct tagDESIGNVECTOR
{
    DWORD  dvReserved;
    DWORD  dvNumAxes;
    LONG   dvValues[16];
} DESIGNVECTOR, *PDESIGNVECTOR,  *LPDESIGNVECTOR;
 int   AddFontResourceExA(  LPCSTR name,  DWORD fl,  PVOID res);
 int   AddFontResourceExW(  LPCWSTR name,  DWORD fl,  PVOID res);
 BOOL  RemoveFontResourceExA(  LPCSTR name,  DWORD fl,  PVOID pdv);
 BOOL  RemoveFontResourceExW(  LPCWSTR name,  DWORD fl,  PVOID pdv);
 HANDLE  AddFontMemResourceEx(    PVOID pFileView,
                                                 DWORD cjSize,
                                                 PVOID pvResrved,
                                                 DWORD* pNumFonts);
 BOOL  RemoveFontMemResourceEx(  HANDLE h);
typedef struct tagAXISINFOA
{
    LONG   axMinValue;
    LONG   axMaxValue;
    BYTE   axAxisName[16];
} AXISINFOA, *PAXISINFOA,  *LPAXISINFOA;
typedef struct tagAXISINFOW
{
    LONG   axMinValue;
    LONG   axMaxValue;
    WCHAR  axAxisName[16];
} AXISINFOW, *PAXISINFOW,  *LPAXISINFOW;
typedef AXISINFOA AXISINFO;
typedef PAXISINFOA PAXISINFO;
typedef LPAXISINFOA LPAXISINFO;
typedef struct tagAXESLISTA
{
    DWORD     axlReserved;
    DWORD     axlNumAxes;
    AXISINFOA axlAxisInfo[16];
} AXESLISTA, *PAXESLISTA,  *LPAXESLISTA;
typedef struct tagAXESLISTW
{
    DWORD     axlReserved;
    DWORD     axlNumAxes;
    AXISINFOW axlAxisInfo[16];
} AXESLISTW, *PAXESLISTW,  *LPAXESLISTW;
typedef AXESLISTA AXESLIST;
typedef PAXESLISTA PAXESLIST;
typedef LPAXESLISTA LPAXESLIST;
typedef struct tagENUMLOGFONTEXDVA
{
    ENUMLOGFONTEXA elfEnumLogfontEx;
    DESIGNVECTOR   elfDesignVector;
} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA,  *LPENUMLOGFONTEXDVA;
typedef struct tagENUMLOGFONTEXDVW
{
    ENUMLOGFONTEXW elfEnumLogfontEx;
    DESIGNVECTOR   elfDesignVector;
} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW,  *LPENUMLOGFONTEXDVW;
typedef ENUMLOGFONTEXDVA ENUMLOGFONTEXDV;
typedef PENUMLOGFONTEXDVA PENUMLOGFONTEXDV;
typedef LPENUMLOGFONTEXDVA LPENUMLOGFONTEXDV;
 HFONT   CreateFontIndirectExA(  const ENUMLOGFONTEXDVA *);
 HFONT   CreateFontIndirectExW(  const ENUMLOGFONTEXDVW *);
typedef struct tagENUMTEXTMETRICA
{
    NEWTEXTMETRICEXA etmNewTextMetricEx;
    AXESLISTA        etmAxesList;
} ENUMTEXTMETRICA, *PENUMTEXTMETRICA,  *LPENUMTEXTMETRICA;
typedef struct tagENUMTEXTMETRICW
{
    NEWTEXTMETRICEXW etmNewTextMetricEx;
    AXESLISTW        etmAxesList;
} ENUMTEXTMETRICW, *PENUMTEXTMETRICW,  *LPENUMTEXTMETRICW;
typedef ENUMTEXTMETRICA ENUMTEXTMETRIC;
typedef PENUMTEXTMETRICA PENUMTEXTMETRIC;
typedef LPENUMTEXTMETRICA LPENUMTEXTMETRIC;
 BOOL   GetViewportExtEx(  HDC hdc,  LPSIZE lpsize);
 BOOL   GetViewportOrgEx(  HDC hdc,  LPPOINT lppoint);
 BOOL   GetWindowExtEx(  HDC hdc,  LPSIZE lpsize);
 BOOL   GetWindowOrgEx(  HDC hdc,  LPPOINT lppoint);
  int   IntersectClipRect(  HDC hdc,  int left,  int top,  int right,  int bottom);
  BOOL  InvertRgn(  HDC hdc,  HRGN hrgn);
 BOOL  LineDDA(  int xStart,  int yStart,  int xEnd,  int yEnd,  LINEDDAPROC lpProc,  LPARAM data);
  BOOL  LineTo(  HDC hdc,  int x,  int y);
 BOOL  MaskBlt(  HDC hdcDest,  int xDest,  int yDest,  int width,  int height,
               HDC hdcSrc,  int xSrc,  int ySrc,  HBITMAP hbmMask,  int xMask,  int yMask,  DWORD rop);
 BOOL  PlgBlt(  HDC hdcDest,  const POINT * lpPoint,  HDC hdcSrc,  int xSrc,  int ySrc,  int width,
                      int height,  HBITMAP hbmMask,  int xMask,  int yMask);
  int   OffsetClipRgn( HDC hdc,  int x,  int y);
 int   OffsetRgn( HRGN hrgn,  int x,  int y);
  BOOL  PatBlt( HDC hdc,  int x,  int y,  int w,  int h,  DWORD rop);
  BOOL  Pie( HDC hdc,  int left,  int top,  int right,  int bottom,  int xr1,  int yr1,  int xr2,  int yr2);
 BOOL  PlayMetaFile( HDC hdc,  HMETAFILE hmf);
  BOOL  PaintRgn( HDC hdc,  HRGN hrgn);
  BOOL  PolyPolygon( HDC hdc,   const POINT *apt,   const INT *asz,   int csz);
 BOOL  PtInRegion( HRGN hrgn,  int x,  int y);
 BOOL  PtVisible( HDC hdc,  int x,  int y);
 BOOL  RectInRegion( HRGN hrgn,  const RECT * lprect);
 BOOL  RectVisible( HDC hdc,  const RECT * lprect);
  BOOL  Rectangle( HDC hdc,  int left,  int top,  int right,  int bottom);
  BOOL  RestoreDC( HDC hdc,  int nSavedDC);
  HDC   ResetDCA( HDC hdc,  const DEVMODEA * lpdm);
  HDC   ResetDCW( HDC hdc,  const DEVMODEW * lpdm);
  UINT  RealizePalette( HDC hdc);
 BOOL  RemoveFontResourceA( LPCSTR lpFileName);
 BOOL  RemoveFontResourceW( LPCWSTR lpFileName);
  BOOL   RoundRect( HDC hdc,  int left,  int top,  int right,  int bottom,  int width,  int height);
  BOOL  ResizePalette( HPALETTE hpal,  UINT n);
  int   SaveDC( HDC hdc);
  int   SelectClipRgn( HDC hdc,  HRGN hrgn);
 int   ExtSelectClipRgn( HDC hdc,  HRGN hrgn,  int mode);
 int   SetMetaRgn( HDC hdc);
  HGDIOBJ  SelectObject( HDC hdc,  HGDIOBJ h);
  HPALETTE  SelectPalette( HDC hdc,  HPALETTE hPal,  BOOL bForceBkgd);
  COLORREF  SetBkColor( HDC hdc,  COLORREF color);
 COLORREF  SetDCBrushColor( HDC hdc,  COLORREF color);
 COLORREF  SetDCPenColor( HDC hdc,  COLORREF color);
  int    SetBkMode( HDC hdc,  int mode);

LONG
SetBitmapBits(
     HBITMAP hbm,
     DWORD cb,
     const void *pvBits);
 UINT   SetBoundsRect( HDC hdc,  const RECT * lprect,  UINT flags);
 int    SetDIBits( HDC hdc,  HBITMAP hbm,  UINT start,  UINT cLines,  const void *lpBits,  const BITMAPINFO * lpbmi,  UINT ColorUse);
  int    SetDIBitsToDevice( HDC hdc,  int xDest,  int yDest,  DWORD w,  DWORD h,  int xSrc,
         int ySrc,  UINT StartScan,  UINT cLines,  const void * lpvBits,  const BITMAPINFO * lpbmi,  UINT ColorUse);
  DWORD  SetMapperFlags( HDC hdc,  DWORD flags);
 int    SetGraphicsMode( HDC hdc,  int iMode);
  int    SetMapMode( HDC hdc,  int iMode);
  DWORD  SetLayout( HDC hdc,  DWORD l);
 DWORD  GetLayout( HDC hdc);
 HMETAFILE    SetMetaFileBitsEx( UINT cbBuffer,  const BYTE *lpData);
  UINT   SetPaletteEntries(    HPALETTE hpal,
                                             UINT iStart,
                                             UINT cEntries,
                                             const PALETTEENTRY *pPalEntries);
  COLORREF  SetPixel( HDC hdc,  int x,  int y,  COLORREF color);
 BOOL    SetPixelV( HDC hdc,  int x,  int y,  COLORREF color);
 BOOL   SetPixelFormat( HDC hdc,  int format,  const PIXELFORMATDESCRIPTOR * ppfd);
  int    SetPolyFillMode( HDC hdc,  int mode);
  BOOL   StretchBlt( HDC hdcDest,  int xDest,  int yDest,  int wDest,  int hDest,  HDC hdcSrc,  int xSrc,  int ySrc,  int wSrc,  int hSrc,  DWORD rop);
 BOOL    SetRectRgn( HRGN hrgn,  int left,  int top,  int right,  int bottom);
  int    StretchDIBits( HDC hdc,  int xDest,  int yDest,  int DestWidth,  int DestHeight,  int xSrc,  int ySrc,  int SrcWidth,  int SrcHeight,
         const void * lpBits,  const BITMAPINFO * lpbmi,  UINT iUsage,  DWORD rop);
  int    SetROP2( HDC hdc,  int rop2);
  int    SetStretchBltMode( HDC hdc,  int mode);
 UINT   SetSystemPaletteUse( HDC hdc,  UINT use);
  int    SetTextCharacterExtra( HDC hdc,  int extra);
  COLORREF  SetTextColor( HDC hdc,  COLORREF color);
  UINT   SetTextAlign( HDC hdc,  UINT align);
  BOOL   SetTextJustification( HDC hdc,  int extra,  int count);
 BOOL   UpdateColors( HDC hdc);
typedef USHORT COLOR16;
typedef struct _TRIVERTEX
{
    LONG    x;
    LONG    y;
    COLOR16 Red;
    COLOR16 Green;
    COLOR16 Blue;
    COLOR16 Alpha;
}TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX;
typedef struct _GRADIENT_TRIANGLE
{
    ULONG Vertex1;
    ULONG Vertex2;
    ULONG Vertex3;
} GRADIENT_TRIANGLE,*PGRADIENT_TRIANGLE,*LPGRADIENT_TRIANGLE;
typedef struct _GRADIENT_RECT
{
    ULONG UpperLeft;
    ULONG LowerRight;
}GRADIENT_RECT,*PGRADIENT_RECT,*LPGRADIENT_RECT;
typedef struct _BLENDFUNCTION
{
    BYTE   BlendOp;
    BYTE   BlendFlags;
    BYTE   SourceConstantAlpha;
    BYTE   AlphaFormat;
}BLENDFUNCTION,*PBLENDFUNCTION;
 BOOL  AlphaBlend(  HDC hdcDest,  int xoriginDest,  int yoriginDest,  int wDest,  int hDest,  HDC hdcSrc,  int xoriginSrc,  int yoriginSrc,  int wSrc,  int hSrc,  BLENDFUNCTION ftn);
 BOOL  TransparentBlt( HDC hdcDest, int xoriginDest,  int yoriginDest,  int wDest,  int hDest,  HDC hdcSrc,
                                            int xoriginSrc,  int yoriginSrc,  int wSrc,  int hSrc,  UINT crTransparent);

BOOL

GradientFill(
     HDC hdc,
     PTRIVERTEX pVertex,
     ULONG nVertex,
     PVOID pMesh,
     ULONG nMesh,
     ULONG ulMode
    );
 BOOL   GdiAlphaBlend( HDC hdcDest,  int xoriginDest,  int yoriginDest,  int wDest,  int hDest,  HDC hdcSrc,  int xoriginSrc,  int yoriginSrc,  int wSrc,  int hSrc,  BLENDFUNCTION ftn);
 BOOL   GdiTransparentBlt( HDC hdcDest, int xoriginDest,  int yoriginDest,  int wDest,  int hDest,  HDC hdcSrc,
                                            int xoriginSrc,  int yoriginSrc,  int wSrc,  int hSrc,  UINT crTransparent);
 BOOL   GdiGradientFill(  HDC hdc,
                                         PTRIVERTEX pVertex,
                                         ULONG nVertex,
                                         PVOID pMesh,
                                         ULONG nCount,
                                         ULONG ulMode);
 BOOL   PlayMetaFileRecord(   HDC hdc,
                                             LPHANDLETABLE lpHandleTable,
                                             LPMETARECORD lpMR,
                                             UINT noObjs);
typedef int (* MFENUMPROC)(  HDC hdc,  HANDLETABLE * lpht,  METARECORD * lpMR,  int nObj,  LPARAM param);
 BOOL   EnumMetaFile(  HDC hdc,  HMETAFILE hmf,  MFENUMPROC proc,  LPARAM param);
typedef int (* ENHMFENUMPROC)( HDC hdc,  HANDLETABLE * lpht,  const ENHMETARECORD * lpmr,  int hHandles,  LPARAM data);
 HENHMETAFILE  CloseEnhMetaFile(  HDC hdc);
 HENHMETAFILE  CopyEnhMetaFileA(  HENHMETAFILE hEnh,  LPCSTR lpFileName);
 HENHMETAFILE  CopyEnhMetaFileW(  HENHMETAFILE hEnh,  LPCWSTR lpFileName);
 HDC    CreateEnhMetaFileA(  HDC hdc,  LPCSTR lpFilename,  const RECT *lprc,  LPCSTR lpDesc);
 HDC    CreateEnhMetaFileW(  HDC hdc,  LPCWSTR lpFilename,  const RECT *lprc,  LPCWSTR lpDesc);
 BOOL   DeleteEnhMetaFile(  HENHMETAFILE hmf);
 BOOL   EnumEnhMetaFile(  HDC hdc,  HENHMETAFILE hmf,  ENHMFENUMPROC proc,
                                         LPVOID param,  const RECT * lpRect);
 HENHMETAFILE   GetEnhMetaFileA(  LPCSTR lpName);
 HENHMETAFILE   GetEnhMetaFileW(  LPCWSTR lpName);
 UINT   GetEnhMetaFileBits(   HENHMETAFILE hEMF,
                                             UINT nSize,
                                             LPBYTE lpData);
 UINT   GetEnhMetaFileDescriptionA(   HENHMETAFILE hemf,
                                                     UINT cchBuffer,
                                                     LPSTR lpDescription);
 UINT   GetEnhMetaFileDescriptionW(   HENHMETAFILE hemf,
                                                     UINT cchBuffer,
                                                     LPWSTR lpDescription);
 UINT   GetEnhMetaFileHeader(     HENHMETAFILE hemf,
                                                 UINT nSize,
                                                 LPENHMETAHEADER lpEnhMetaHeader);
 UINT   GetEnhMetaFilePaletteEntries( HENHMETAFILE hemf,
                                                     UINT nNumEntries,
                                                     LPPALETTEENTRY lpPaletteEntries);
 UINT   GetEnhMetaFilePixelFormat(    HENHMETAFILE hemf,
                                                     UINT cbBuffer,
                                                     PIXELFORMATDESCRIPTOR *ppfd);
 UINT   GetWinMetaFileBits(   HENHMETAFILE hemf,
                                             UINT cbData16,
                                             LPBYTE pData16,
                                             INT iMapMode,
                                             HDC hdcRef);
 BOOL   PlayEnhMetaFile(  HDC hdc,  HENHMETAFILE hmf,  const RECT * lprect);
 BOOL   PlayEnhMetaFileRecord(    HDC hdc,
                                                 LPHANDLETABLE pht,
                                                 const ENHMETARECORD *pmr,
                                                 UINT cht);
 HENHMETAFILE   SetEnhMetaFileBits(   UINT nSize,
                                                     const BYTE * pb);
 HENHMETAFILE   SetWinMetaFileBits(   UINT nSize,
                                                     const BYTE *lpMeta16Data,
                                                     HDC hdcRef,
                                                     const METAFILEPICT *lpMFP);
 BOOL   GdiComment( HDC hdc,  UINT nSize,  const BYTE *lpData);
 BOOL  GetTextMetricsA(  HDC hdc,  LPTEXTMETRICA lptm);
 BOOL  GetTextMetricsW(  HDC hdc,  LPTEXTMETRICW lptm);
typedef struct tagDIBSECTION {
    BITMAP       dsBm;
    BITMAPINFOHEADER    dsBmih;
    DWORD               dsBitfields[3];
    HANDLE              dshSection;
    DWORD               dsOffset;
} DIBSECTION,  *LPDIBSECTION, *PDIBSECTION;
 BOOL  AngleArc(  HDC hdc,  int x,  int y,  DWORD r,  FLOAT StartAngle,  FLOAT SweepAngle);
 BOOL  PolyPolyline( HDC hdc,  const POINT *apt,  const DWORD *asz,  DWORD csz);
 BOOL  GetWorldTransform(  HDC hdc,  LPXFORM lpxf);
 BOOL  SetWorldTransform(  HDC hdc,  const XFORM * lpxf);
 BOOL  ModifyWorldTransform(  HDC hdc,  const XFORM * lpxf,  DWORD mode);
 BOOL  CombineTransform(  LPXFORM lpxfOut,  const XFORM *lpxf1,  const XFORM *lpxf2);
 HBITMAP  CreateDIBSection( HDC hdc,  const BITMAPINFO *lpbmi,  UINT usage,  void **ppvBits,  HANDLE hSection,  DWORD offset);
 UINT  GetDIBColorTable(  HDC  hdc,
                                         UINT iStart,
                                         UINT cEntries,
                                         RGBQUAD *prgbq);
 UINT  SetDIBColorTable(  HDC  hdc,
                                         UINT iStart,
                                         UINT cEntries,
                                         const RGBQUAD *prgbq);
typedef struct  tagCOLORADJUSTMENT {
    WORD   caSize;
    WORD   caFlags;
    WORD   caIlluminantIndex;
    WORD   caRedGamma;
    WORD   caGreenGamma;
    WORD   caBlueGamma;
    WORD   caReferenceBlack;
    WORD   caReferenceWhite;
    SHORT  caContrast;
    SHORT  caBrightness;
    SHORT  caColorfulness;
    SHORT  caRedGreenTint;
} COLORADJUSTMENT, *PCOLORADJUSTMENT,  *LPCOLORADJUSTMENT;
 BOOL  SetColorAdjustment(  HDC hdc,  const COLORADJUSTMENT *lpca);
 BOOL  GetColorAdjustment(  HDC hdc,  LPCOLORADJUSTMENT lpca);
 HPALETTE  CreateHalftonePalette(  HDC hdc);
typedef BOOL (* ABORTPROC)(  HDC,  int);
typedef struct _DOCINFOA {
    int     cbSize;
    LPCSTR   lpszDocName;
    LPCSTR   lpszOutput;
    LPCSTR   lpszDatatype;
    DWORD    fwType;
} DOCINFOA, *LPDOCINFOA;
typedef struct _DOCINFOW {
    int     cbSize;
    LPCWSTR  lpszDocName;
    LPCWSTR  lpszOutput;
    LPCWSTR  lpszDatatype;
    DWORD    fwType;
} DOCINFOW, *LPDOCINFOW;
typedef DOCINFOA DOCINFO;
typedef LPDOCINFOA LPDOCINFO;
  int  StartDocA( HDC hdc,  const DOCINFOA *lpdi);
  int  StartDocW( HDC hdc,  const DOCINFOW *lpdi);
  int  EndDoc( HDC hdc);
  int  StartPage( HDC hdc);
  int  EndPage( HDC hdc);
  int  AbortDoc( HDC hdc);
 int  SetAbortProc( HDC hdc,  ABORTPROC proc);
 BOOL  AbortPath( HDC hdc);
 BOOL  ArcTo( HDC hdc,  int left,  int top,  int right,  int bottom,  int xr1,  int yr1,  int xr2,  int yr2);
 BOOL  BeginPath( HDC hdc);
 BOOL  CloseFigure( HDC hdc);
 BOOL  EndPath( HDC hdc);
 BOOL  FillPath( HDC hdc);
 BOOL  FlattenPath( HDC hdc);
 int   GetPath( HDC hdc,  LPPOINT apt,  LPBYTE aj, int cpt);
 HRGN  PathToRegion( HDC hdc);
 BOOL  PolyDraw( HDC hdc,  const POINT * apt,  const BYTE * aj,  int cpt);
 BOOL  SelectClipPath( HDC hdc,  int mode);
 int   SetArcDirection( HDC hdc,  int dir);
 BOOL  SetMiterLimit( HDC hdc,  FLOAT limit,  PFLOAT old);
 BOOL  StrokeAndFillPath( HDC hdc);
 BOOL  StrokePath( HDC hdc);
 BOOL  WidenPath( HDC hdc);
 HPEN  ExtCreatePen(  DWORD iPenStyle,
                                     DWORD cWidth,
                                     const LOGBRUSH *plbrush,
                                     DWORD cStyle,
                                     const DWORD *pstyle);
 BOOL  GetMiterLimit( HDC hdc,  PFLOAT plimit);
 int   GetArcDirection( HDC hdc);
 int    GetObjectA( HANDLE h,  int c,  LPVOID pv);
 int    GetObjectW( HANDLE h,  int c,  LPVOID pv);
  BOOL   MoveToEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
  BOOL   TextOutA(  HDC hdc,  int x,  int y,  LPCSTR lpString,  int c);
  BOOL   TextOutW(  HDC hdc,  int x,  int y,  LPCWSTR lpString,  int c);
  BOOL   ExtTextOutA(  HDC hdc,  int x,  int y,  UINT options,  const RECT * lprect,  LPCSTR lpString,  UINT c,  const INT * lpDx);
  BOOL   ExtTextOutW(  HDC hdc,  int x,  int y,  UINT options,  const RECT * lprect,  LPCWSTR lpString,  UINT c,  const INT * lpDx);
 BOOL   PolyTextOutA( HDC hdc,  const POLYTEXTA * ppt,  int nstrings);
 BOOL   PolyTextOutW( HDC hdc,  const POLYTEXTW * ppt,  int nstrings);
 HRGN   CreatePolygonRgn(     const POINT *pptl,
                                             int cPoint,
                                             int iMode);
 BOOL   DPtoLP(  HDC hdc,  LPPOINT lppt,  int c);
 BOOL   LPtoDP(  HDC hdc,  LPPOINT lppt,  int c);
  BOOL   Polygon( HDC hdc,  const POINT *apt,  int cpt);
  BOOL   Polyline( HDC hdc,  const POINT *apt,  int cpt);
 BOOL   PolyBezier( HDC hdc,  const POINT * apt,  DWORD cpt);
 BOOL   PolyBezierTo( HDC hdc,  const POINT * apt,  DWORD cpt);
 BOOL   PolylineTo( HDC hdc,  const POINT * apt,  DWORD cpt);
  BOOL   SetViewportExtEx(  HDC hdc,  int x,  int y,  LPSIZE lpsz);
  BOOL   SetViewportOrgEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
  BOOL   SetWindowExtEx(  HDC hdc,  int x,  int y,  LPSIZE lpsz);
  BOOL   SetWindowOrgEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
  BOOL   OffsetViewportOrgEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
  BOOL   OffsetWindowOrgEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
  BOOL   ScaleViewportExtEx(  HDC hdc,  int xn,  int dx,  int yn,  int yd,  LPSIZE lpsz);
  BOOL   ScaleWindowExtEx(  HDC hdc,  int xn,  int xd,  int yn,  int yd,  LPSIZE lpsz);
 BOOL   SetBitmapDimensionEx(  HBITMAP hbm,  int w,  int h,  LPSIZE lpsz);
 BOOL   SetBrushOrgEx(  HDC hdc,  int x,  int y,  LPPOINT lppt);
 int    GetTextFaceA(  HDC hdc,  int c,   LPSTR lpName);
 int    GetTextFaceW(  HDC hdc,  int c,   LPWSTR lpName);
typedef struct tagKERNINGPAIR {
   WORD wFirst;
   WORD wSecond;
   int  iKernAmount;
} KERNINGPAIR, *LPKERNINGPAIR;
 DWORD  GetKerningPairsA(     HDC hdc,
                                             DWORD nPairs,
                                             LPKERNINGPAIR   lpKernPair);
 DWORD  GetKerningPairsW(     HDC hdc,
                                             DWORD nPairs,
                                             LPKERNINGPAIR   lpKernPair);
 BOOL   GetDCOrgEx(  HDC hdc,  LPPOINT lppt);
 BOOL   FixBrushOrgEx(  HDC hdc,  int x,  int y,   LPPOINT ptl);
 BOOL   UnrealizeObject(  HGDIOBJ h);
 BOOL   GdiFlush(void);
 DWORD  GdiSetBatchLimit(  DWORD dw);
 DWORD  GdiGetBatchLimit(void);
typedef int (* ICMENUMPROCA)(LPSTR, LPARAM);
typedef int (* ICMENUMPROCW)(LPWSTR, LPARAM);
 int          SetICMMode(  HDC hdc,  int mode);
 BOOL         CheckColorsInGamut(     HDC hdc,
                                                     LPRGBTRIPLE lpRGBTriple,
                                                     LPVOID dlpBuffer,
                                                     DWORD nCount);
 HCOLORSPACE  GetColorSpace(  HDC hdc);
 BOOL         GetLogColorSpaceA(  HCOLORSPACE hColorSpace,
                                                 LPLOGCOLORSPACEA lpBuffer,
                                                 DWORD nSize);
 BOOL         GetLogColorSpaceW(  HCOLORSPACE hColorSpace,
                                                 LPLOGCOLORSPACEW lpBuffer,
                                                 DWORD nSize);
 HCOLORSPACE  CreateColorSpaceA(  LPLOGCOLORSPACEA lplcs);
 HCOLORSPACE  CreateColorSpaceW(  LPLOGCOLORSPACEW lplcs);
 HCOLORSPACE  SetColorSpace(  HDC hdc,  HCOLORSPACE hcs);
 BOOL         DeleteColorSpace(  HCOLORSPACE hcs);
 BOOL         GetICMProfileA(     HDC hdc,
                                                 LPDWORD pBufSize,
                                                 LPSTR pszFilename);
 BOOL         GetICMProfileW(     HDC hdc,
                                                 LPDWORD pBufSize,
                                                 LPWSTR pszFilename);
 BOOL         SetICMProfileA(  HDC hdc,  LPSTR lpFileName);
 BOOL         SetICMProfileW(  HDC hdc,  LPWSTR lpFileName);
 BOOL         GetDeviceGammaRamp(  HDC hdc,  LPVOID lpRamp);
 BOOL         SetDeviceGammaRamp(  HDC hdc,   LPVOID lpRamp);
 BOOL         ColorMatchToTarget(  HDC hdc,  HDC hdcTarget,  DWORD action);
 int          EnumICMProfilesA(  HDC hdc,  ICMENUMPROCA proc,  LPARAM param);
 int          EnumICMProfilesW(  HDC hdc,  ICMENUMPROCW proc,  LPARAM param);
 BOOL         UpdateICMRegKeyA(  DWORD reserved,  LPSTR lpszCMID,  LPSTR lpszFileName,  UINT command);
 BOOL         UpdateICMRegKeyW(  DWORD reserved,  LPWSTR lpszCMID,  LPWSTR lpszFileName,  UINT command);
 BOOL         ColorCorrectPalette(  HDC hdc,  HPALETTE hPal,  DWORD deFirst,  DWORD num);
typedef struct tagEMR
{
    DWORD   iType;
    DWORD   nSize;
} EMR, *PEMR;
typedef struct tagEMRTEXT
{
    POINTL  ptlReference;
    DWORD   nChars;
    DWORD   offString;
    DWORD   fOptions;
    RECTL   rcl;
    DWORD   offDx;
} EMRTEXT, *PEMRTEXT;
typedef struct tagABORTPATH
{
    EMR     emr;
} EMRABORTPATH,      *PEMRABORTPATH,
  EMRBEGINPATH,      *PEMRBEGINPATH,
  EMRENDPATH,        *PEMRENDPATH,
  EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
  EMRFLATTENPATH,    *PEMRFLATTENPATH,
  EMRWIDENPATH,      *PEMRWIDENPATH,
  EMRSETMETARGN,     *PEMRSETMETARGN,
  EMRSAVEDC,         *PEMRSAVEDC,
  EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
typedef struct tagEMRSELECTCLIPPATH
{
    EMR     emr;
    DWORD   iMode;
} EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
  EMRSETBKMODE,         *PEMRSETBKMODE,
  EMRSETMAPMODE,        *PEMRSETMAPMODE,
  EMRSETLAYOUT,         *PEMRSETLAYOUT,
  EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
  EMRSETROP2,           *PEMRSETROP2,
  EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
  EMRSETICMMODE,        *PEMRSETICMMODE,
  EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN;
typedef struct tagEMRSETMITERLIMIT
{
    EMR     emr;
    FLOAT   eMiterLimit;
} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
typedef struct tagEMRRESTOREDC
{
    EMR     emr;
    LONG    iRelative;
} EMRRESTOREDC, *PEMRRESTOREDC;
typedef struct tagEMRSETARCDIRECTION
{
    EMR     emr;
    DWORD   iArcDirection;
} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
typedef struct tagEMRSETMAPPERFLAGS
{
    EMR     emr;
    DWORD   dwFlags;
} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
typedef struct tagEMRSETTEXTCOLOR
{
    EMR     emr;
    COLORREF crColor;
} EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
  EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
typedef struct tagEMRSELECTOBJECT
{
    EMR     emr;
    DWORD   ihObject;
} EMRSELECTOBJECT, *PEMRSELECTOBJECT,
  EMRDELETEOBJECT, *PEMRDELETEOBJECT;
typedef struct tagEMRSELECTPALETTE
{
    EMR     emr;
    DWORD   ihPal;
} EMRSELECTPALETTE, *PEMRSELECTPALETTE;
typedef struct tagEMRRESIZEPALETTE
{
    EMR     emr;
    DWORD   ihPal;
    DWORD   cEntries;
} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
typedef struct tagEMRSETPALETTEENTRIES
{
    EMR     emr;
    DWORD   ihPal;
    DWORD   iStart;
    DWORD   cEntries;
    PALETTEENTRY aPalEntries[1];
} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
typedef struct tagEMRSETCOLORADJUSTMENT
{
    EMR     emr;
    COLORADJUSTMENT ColorAdjustment;
} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
typedef struct tagEMRGDICOMMENT
{
    EMR     emr;
    DWORD   cbData;
    BYTE    Data[1];
} EMRGDICOMMENT, *PEMRGDICOMMENT;
typedef struct tagEMREOF
{
    EMR     emr;
    DWORD   nPalEntries;
    DWORD   offPalEntries;
    DWORD   nSizeLast;
} EMREOF, *PEMREOF;
typedef struct tagEMRLINETO
{
    EMR     emr;
    POINTL  ptl;
} EMRLINETO,   *PEMRLINETO,
  EMRMOVETOEX, *PEMRMOVETOEX;
typedef struct tagEMROFFSETCLIPRGN
{
    EMR     emr;
    POINTL  ptlOffset;
} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
typedef struct tagEMRFILLPATH
{
    EMR     emr;
    RECTL   rclBounds;
} EMRFILLPATH,          *PEMRFILLPATH,
  EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
  EMRSTROKEPATH,        *PEMRSTROKEPATH;
typedef struct tagEMREXCLUDECLIPRECT
{
    EMR     emr;
    RECTL   rclClip;
} EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
  EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
typedef struct tagEMRSETVIEWPORTORGEX
{
    EMR     emr;
    POINTL  ptlOrigin;
} EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
  EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX,
  EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX;
typedef struct tagEMRSETVIEWPORTEXTEX
{
    EMR     emr;
    SIZEL   szlExtent;
} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
  EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
typedef struct tagEMRSCALEVIEWPORTEXTEX
{
    EMR     emr;
    LONG    xNum;
    LONG    xDenom;
    LONG    yNum;
    LONG    yDenom;
} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
  EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
typedef struct tagEMRSETWORLDTRANSFORM
{
    EMR     emr;
    XFORM   xform;
} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
typedef struct tagEMRMODIFYWORLDTRANSFORM
{
    EMR     emr;
    XFORM   xform;
    DWORD   iMode;
} EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
typedef struct tagEMRSETPIXELV
{
    EMR     emr;
    POINTL  ptlPixel;
    COLORREF crColor;
} EMRSETPIXELV, *PEMRSETPIXELV;
typedef struct tagEMREXTFLOODFILL
{
    EMR     emr;
    POINTL  ptlStart;
    COLORREF crColor;
    DWORD   iMode;
} EMREXTFLOODFILL, *PEMREXTFLOODFILL;
typedef struct tagEMRELLIPSE
{
    EMR     emr;
    RECTL   rclBox;
} EMRELLIPSE,  *PEMRELLIPSE,
  EMRRECTANGLE, *PEMRRECTANGLE;
typedef struct tagEMRROUNDRECT
{
    EMR     emr;
    RECTL   rclBox;
    SIZEL   szlCorner;
} EMRROUNDRECT, *PEMRROUNDRECT;
typedef struct tagEMRARC
{
    EMR     emr;
    RECTL   rclBox;
    POINTL  ptlStart;
    POINTL  ptlEnd;
} EMRARC,   *PEMRARC,
  EMRARCTO, *PEMRARCTO,
  EMRCHORD, *PEMRCHORD,
  EMRPIE,   *PEMRPIE;
typedef struct tagEMRANGLEARC
{
    EMR     emr;
    POINTL  ptlCenter;
    DWORD   nRadius;
    FLOAT   eStartAngle;
    FLOAT   eSweepAngle;
} EMRANGLEARC, *PEMRANGLEARC;
typedef struct tagEMRPOLYLINE
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cptl;
    POINTL  aptl[1];
} EMRPOLYLINE,     *PEMRPOLYLINE,
  EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
  EMRPOLYGON,      *PEMRPOLYGON,
  EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
  EMRPOLYLINETO,   *PEMRPOLYLINETO;
typedef struct tagEMRPOLYLINE16
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cpts;
    POINTS  apts[1];
} EMRPOLYLINE16,     *PEMRPOLYLINE16,
  EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
  EMRPOLYGON16,      *PEMRPOLYGON16,
  EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
  EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
typedef struct tagEMRPOLYDRAW
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cptl;
    POINTL  aptl[1];
    BYTE    abTypes[1];
} EMRPOLYDRAW, *PEMRPOLYDRAW;
typedef struct tagEMRPOLYDRAW16
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cpts;
    POINTS  apts[1];
    BYTE    abTypes[1];
} EMRPOLYDRAW16, *PEMRPOLYDRAW16;
typedef struct tagEMRPOLYPOLYLINE
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   nPolys;
    DWORD   cptl;
    DWORD   aPolyCounts[1];
    POINTL  aptl[1];
} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
  EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
typedef struct tagEMRPOLYPOLYLINE16
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   nPolys;
    DWORD   cpts;
    DWORD   aPolyCounts[1];
    POINTS  apts[1];
} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
  EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
typedef struct tagEMRINVERTRGN
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cbRgnData;
    BYTE    RgnData[1];
} EMRINVERTRGN, *PEMRINVERTRGN,
  EMRPAINTRGN,  *PEMRPAINTRGN;
typedef struct tagEMRFILLRGN
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cbRgnData;
    DWORD   ihBrush;
    BYTE    RgnData[1];
} EMRFILLRGN, *PEMRFILLRGN;
typedef struct tagEMRFRAMERGN
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cbRgnData;
    DWORD   ihBrush;
    SIZEL   szlStroke;
    BYTE    RgnData[1];
} EMRFRAMERGN, *PEMRFRAMERGN;
typedef struct tagEMREXTSELECTCLIPRGN
{
    EMR     emr;
    DWORD   cbRgnData;
    DWORD   iMode;
    BYTE    RgnData[1];
} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
typedef struct tagEMREXTTEXTOUTA
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   iGraphicsMode;
    FLOAT   exScale;
    FLOAT   eyScale;
    EMRTEXT emrtext;
} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
  EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
typedef struct tagEMRPOLYTEXTOUTA
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   iGraphicsMode;
    FLOAT   exScale;
    FLOAT   eyScale;
    LONG    cStrings;
    EMRTEXT aemrtext[1];
} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
  EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
typedef struct tagEMRBITBLT
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    cxDest;
    LONG    cyDest;
    DWORD   dwRop;
    LONG    xSrc;
    LONG    ySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
} EMRBITBLT, *PEMRBITBLT;
typedef struct tagEMRSTRETCHBLT
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    cxDest;
    LONG    cyDest;
    DWORD   dwRop;
    LONG    xSrc;
    LONG    ySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    LONG    cxSrc;
    LONG    cySrc;
} EMRSTRETCHBLT, *PEMRSTRETCHBLT;
typedef struct tagEMRMASKBLT
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    cxDest;
    LONG    cyDest;
    DWORD   dwRop;
    LONG    xSrc;
    LONG    ySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    LONG    xMask;
    LONG    yMask;
    DWORD   iUsageMask;
    DWORD   offBmiMask;
    DWORD   cbBmiMask;
    DWORD   offBitsMask;
    DWORD   cbBitsMask;
} EMRMASKBLT, *PEMRMASKBLT;
typedef struct tagEMRPLGBLT
{
    EMR     emr;
    RECTL   rclBounds;
    POINTL  aptlDest[3];
    LONG    xSrc;
    LONG    ySrc;
    LONG    cxSrc;
    LONG    cySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    LONG    xMask;
    LONG    yMask;
    DWORD   iUsageMask;
    DWORD   offBmiMask;
    DWORD   cbBmiMask;
    DWORD   offBitsMask;
    DWORD   cbBitsMask;
} EMRPLGBLT, *PEMRPLGBLT;
typedef struct tagEMRSETDIBITSTODEVICE
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    xSrc;
    LONG    ySrc;
    LONG    cxSrc;
    LONG    cySrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    DWORD   iUsageSrc;
    DWORD   iStartScan;
    DWORD   cScans;
} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
typedef struct tagEMRSTRETCHDIBITS
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    xSrc;
    LONG    ySrc;
    LONG    cxSrc;
    LONG    cySrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    DWORD   iUsageSrc;
    DWORD   dwRop;
    LONG    cxDest;
    LONG    cyDest;
} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
typedef struct tagEMREXTCREATEFONTINDIRECTW
{
    EMR     emr;
    DWORD   ihFont;
    EXTLOGFONTW elfw;
} EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
typedef struct tagEMRCREATEPALETTE
{
    EMR     emr;
    DWORD   ihPal;
    LOGPALETTE lgpl;
} EMRCREATEPALETTE, *PEMRCREATEPALETTE;
typedef struct tagEMRCREATEPEN
{
    EMR     emr;
    DWORD   ihPen;
    LOGPEN  lopn;
} EMRCREATEPEN, *PEMRCREATEPEN;
typedef struct tagEMREXTCREATEPEN
{
    EMR     emr;
    DWORD   ihPen;
    DWORD   offBmi;
    DWORD   cbBmi;
    DWORD   offBits;
    DWORD   cbBits;
    EXTLOGPEN elp;
} EMREXTCREATEPEN, *PEMREXTCREATEPEN;
typedef struct tagEMRCREATEBRUSHINDIRECT
{
    EMR        emr;
    DWORD      ihBrush;
    LOGBRUSH32 lb;
} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
typedef struct tagEMRCREATEMONOBRUSH
{
    EMR     emr;
    DWORD   ihBrush;
    DWORD   iUsage;
    DWORD   offBmi;
    DWORD   cbBmi;
    DWORD   offBits;
    DWORD   cbBits;
} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
{
    EMR     emr;
    DWORD   ihBrush;
    DWORD   iUsage;
    DWORD   offBmi;
    DWORD   cbBmi;
    DWORD   offBits;
    DWORD   cbBits;
} EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
typedef struct tagEMRFORMAT
{
    DWORD   dSignature;
    DWORD   nVersion;
    DWORD   cbData;
    DWORD   offData;
} EMRFORMAT, *PEMRFORMAT;
typedef struct tagEMRGLSRECORD
{
    EMR     emr;
    DWORD   cbData;
    BYTE    Data[1];
} EMRGLSRECORD, *PEMRGLSRECORD;
typedef struct tagEMRGLSBOUNDEDRECORD
{
    EMR     emr;
    RECTL   rclBounds;
    DWORD   cbData;
    BYTE    Data[1];
} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
typedef struct tagEMRPIXELFORMAT
{
    EMR     emr;
    PIXELFORMATDESCRIPTOR pfd;
} EMRPIXELFORMAT, *PEMRPIXELFORMAT;
typedef struct tagEMRCREATECOLORSPACE
{
    EMR             emr;
    DWORD           ihCS;
    LOGCOLORSPACEA  lcs;
} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
typedef struct tagEMRSETCOLORSPACE
{
    EMR     emr;
    DWORD   ihCS;
} EMRSETCOLORSPACE,    *PEMRSETCOLORSPACE,
  EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
  EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE;
typedef struct tagEMREXTESCAPE
{
    EMR     emr;
    INT     iEscape;
    INT     cbEscData;
    BYTE    EscData[1];
} EMREXTESCAPE,  *PEMREXTESCAPE,
  EMRDRAWESCAPE, *PEMRDRAWESCAPE;
typedef struct tagEMRNAMEDESCAPE
{
    EMR     emr;
    INT     iEscape;
    INT     cbDriver;
    INT     cbEscData;
    BYTE    EscData[1];
} EMRNAMEDESCAPE, *PEMRNAMEDESCAPE;
typedef struct tagEMRSETICMPROFILE
{
    EMR     emr;
    DWORD   dwFlags;
    DWORD   cbName;
    DWORD   cbData;
    BYTE    Data[1];
} EMRSETICMPROFILE,  *PEMRSETICMPROFILE,
  EMRSETICMPROFILEA, *PEMRSETICMPROFILEA,
  EMRSETICMPROFILEW, *PEMRSETICMPROFILEW;
typedef struct tagEMRCREATECOLORSPACEW
{
    EMR             emr;
    DWORD           ihCS;
    LOGCOLORSPACEW  lcs;
    DWORD           dwFlags;
    DWORD           cbData;
    BYTE            Data[1];
} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
typedef struct tagCOLORMATCHTOTARGET
{
    EMR     emr;
    DWORD   dwAction;
    DWORD   dwFlags;
    DWORD   cbName;
    DWORD   cbData;
    BYTE    Data[1];
} EMRCOLORMATCHTOTARGET, *PEMRCOLORMATCHTOTARGET;
typedef struct tagCOLORCORRECTPALETTE
{
    EMR     emr;
    DWORD   ihPalette;
    DWORD   nFirstEntry;
    DWORD   nPalEntries;
    DWORD   nReserved;
} EMRCOLORCORRECTPALETTE, *PEMRCOLORCORRECTPALETTE;
typedef struct tagEMRALPHABLEND
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    cxDest;
    LONG    cyDest;
    DWORD   dwRop;
    LONG    xSrc;
    LONG    ySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    LONG    cxSrc;
    LONG    cySrc;
} EMRALPHABLEND, *PEMRALPHABLEND;
typedef struct tagEMRGRADIENTFILL
{
    EMR       emr;
    RECTL     rclBounds;
    DWORD     nVer;
    DWORD     nTri;
    ULONG     ulMode;
    TRIVERTEX Ver[1];
}EMRGRADIENTFILL,*PEMRGRADIENTFILL;
typedef struct tagEMRTRANSPARENTBLT
{
    EMR     emr;
    RECTL   rclBounds;
    LONG    xDest;
    LONG    yDest;
    LONG    cxDest;
    LONG    cyDest;
    DWORD   dwRop;
    LONG    xSrc;
    LONG    ySrc;
    XFORM   xformSrc;
    COLORREF crBkColorSrc;
    DWORD   iUsageSrc;
    DWORD   offBmiSrc;
    DWORD   cbBmiSrc;
    DWORD   offBitsSrc;
    DWORD   cbBitsSrc;
    LONG    cxSrc;
    LONG    cySrc;
} EMRTRANSPARENTBLT, *PEMRTRANSPARENTBLT;
 BOOL   wglCopyContext(HGLRC, HGLRC, UINT);
 HGLRC  wglCreateContext(HDC);
 HGLRC  wglCreateLayerContext(HDC, int);
 BOOL   wglDeleteContext(HGLRC);
 HGLRC  wglGetCurrentContext(void);
 HDC    wglGetCurrentDC(void);
 PROC   wglGetProcAddress(LPCSTR);
 BOOL   wglMakeCurrent(HDC, HGLRC);
 BOOL   wglShareLists(HGLRC, HGLRC);
 BOOL   wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
 BOOL   wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
 BOOL   SwapBuffers(HDC);
typedef struct _POINTFLOAT {
    FLOAT   x;
    FLOAT   y;
} POINTFLOAT, *PPOINTFLOAT;
typedef struct _GLYPHMETRICSFLOAT {
    FLOAT       gmfBlackBoxX;
    FLOAT       gmfBlackBoxY;
    POINTFLOAT  gmfptGlyphOrigin;
    FLOAT       gmfCellIncX;
    FLOAT       gmfCellIncY;
} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT,  *LPGLYPHMETRICSFLOAT;
 BOOL   wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT,
                                           FLOAT, int, LPGLYPHMETRICSFLOAT);
 BOOL   wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT,
                                           FLOAT, int, LPGLYPHMETRICSFLOAT);
typedef struct tagLAYERPLANEDESCRIPTOR {
    WORD  nSize;
    WORD  nVersion;
    DWORD dwFlags;
    BYTE  iPixelType;
    BYTE  cColorBits;
    BYTE  cRedBits;
    BYTE  cRedShift;
    BYTE  cGreenBits;
    BYTE  cGreenShift;
    BYTE  cBlueBits;
    BYTE  cBlueShift;
    BYTE  cAlphaBits;
    BYTE  cAlphaShift;
    BYTE  cAccumBits;
    BYTE  cAccumRedBits;
    BYTE  cAccumGreenBits;
    BYTE  cAccumBlueBits;
    BYTE  cAccumAlphaBits;
    BYTE  cDepthBits;
    BYTE  cStencilBits;
    BYTE  cAuxBuffers;
    BYTE  iLayerPlane;
    BYTE  bReserved;
    COLORREF crTransparent;
} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR,  *LPLAYERPLANEDESCRIPTOR;
 BOOL   wglDescribeLayerPlane(HDC, int, int, UINT,
                                             LPLAYERPLANEDESCRIPTOR);
 int    wglSetLayerPaletteEntries(HDC, int, int, int,
                                                 const COLORREF *);
 int    wglGetLayerPaletteEntries(HDC, int, int, int,
                                                 COLORREF *);
 BOOL   wglRealizeLayerPalette(HDC, int, BOOL);
 BOOL   wglSwapLayerBuffers(HDC, UINT);
typedef struct _WGLSWAP
{
    HDC hdc;
    UINT uiFlags;
} WGLSWAP, *PWGLSWAP,  *LPWGLSWAP;
 DWORD  wglSwapMultipleBuffers(UINT, const WGLSWAP *);
typedef HANDLE HDWP;
typedef void MENUTEMPLATEA;
typedef void MENUTEMPLATEW;
typedef MENUTEMPLATEA MENUTEMPLATE;
typedef PVOID LPMENUTEMPLATEA;
typedef PVOID LPMENUTEMPLATEW;
typedef LPMENUTEMPLATEA LPMENUTEMPLATE;
typedef LRESULT (* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
typedef INT_PTR (* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
typedef void (* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD);
typedef BOOL (* GRAYSTRINGPROC)(HDC, LPARAM, int);
typedef BOOL (* WNDENUMPROC)(HWND, LPARAM);
typedef LRESULT (* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);
typedef void (* SENDASYNCPROC)(HWND, UINT, ULONG_PTR, LRESULT);
typedef BOOL (* PROPENUMPROCA)(HWND, LPCSTR, HANDLE);
typedef BOOL (* PROPENUMPROCW)(HWND, LPCWSTR, HANDLE);
typedef BOOL (* PROPENUMPROCEXA)(HWND, LPSTR, HANDLE, ULONG_PTR);
typedef BOOL (* PROPENUMPROCEXW)(HWND, LPWSTR, HANDLE, ULONG_PTR);
typedef int (* EDITWORDBREAKPROCA)(LPSTR lpch, int ichCurrent, int cch, int code);
typedef int (* EDITWORDBREAKPROCW)(LPWSTR lpch, int ichCurrent, int cch, int code);
typedef BOOL (* DRAWSTATEPROC)(HDC hdc, LPARAM lData, WPARAM wData, int cx, int cy);
typedef PROPENUMPROCA        PROPENUMPROC;
typedef PROPENUMPROCEXA      PROPENUMPROCEX;
typedef EDITWORDBREAKPROCA   EDITWORDBREAKPROC;
typedef BOOL (* NAMEENUMPROCA)(LPSTR, LPARAM);
typedef BOOL (* NAMEENUMPROCW)(LPWSTR, LPARAM);
typedef NAMEENUMPROCA   WINSTAENUMPROCA;
typedef NAMEENUMPROCA   DESKTOPENUMPROCA;
typedef NAMEENUMPROCW   WINSTAENUMPROCW;
typedef NAMEENUMPROCW   DESKTOPENUMPROCW;
typedef WINSTAENUMPROCA     WINSTAENUMPROC;
typedef DESKTOPENUMPROCA    DESKTOPENUMPROC;

int

wvsprintfA(
     LPSTR,
      LPCSTR,
     va_list arglist);

int

wvsprintfW(
     LPWSTR,
      LPCWSTR,
     va_list arglist);

int
__cdecl
wsprintfA(
     LPSTR,
      LPCSTR,
    ...);

int
__cdecl
wsprintfW(
     LPWSTR,
      LPCWSTR,
    ...);
typedef struct tagCBT_CREATEWNDA
{
    struct tagCREATESTRUCTA *lpcs;
    HWND           hwndInsertAfter;
} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;
typedef struct tagCBT_CREATEWNDW
{
    struct tagCREATESTRUCTW *lpcs;
    HWND           hwndInsertAfter;
} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;
typedef CBT_CREATEWNDA CBT_CREATEWND;
typedef LPCBT_CREATEWNDA LPCBT_CREATEWND;
typedef struct tagCBTACTIVATESTRUCT
{
    BOOL    fMouse;
    HWND    hWndActive;
} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;
typedef struct tagWTSSESSION_NOTIFICATION
{
    DWORD cbSize;
    DWORD dwSessionId;
} WTSSESSION_NOTIFICATION, *PWTSSESSION_NOTIFICATION;
typedef struct
{
    HWND    hwnd;
    RECT    rc;
} SHELLHOOKINFO, *LPSHELLHOOKINFO;
typedef struct tagEVENTMSG {
    UINT    message;
    UINT    paramL;
    UINT    paramH;
    DWORD    time;
    HWND     hwnd;
} EVENTMSG, *PEVENTMSGMSG,  *NPEVENTMSGMSG,  *LPEVENTMSGMSG;
typedef struct tagEVENTMSG *PEVENTMSG,  *NPEVENTMSG,  *LPEVENTMSG;
typedef struct tagCWPSTRUCT {
    LPARAM  lParam;
    WPARAM  wParam;
    UINT    message;
    HWND    hwnd;
} CWPSTRUCT, *PCWPSTRUCT,  *NPCWPSTRUCT,  *LPCWPSTRUCT;
typedef struct tagCWPRETSTRUCT {
    LRESULT lResult;
    LPARAM  lParam;
    WPARAM  wParam;
    UINT    message;
    HWND    hwnd;
} CWPRETSTRUCT, *PCWPRETSTRUCT,  *NPCWPRETSTRUCT,  *LPCWPRETSTRUCT;
typedef struct tagKBDLLHOOKSTRUCT {
    DWORD   vkCode;
    DWORD   scanCode;
    DWORD   flags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT,  *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
typedef struct tagMSLLHOOKSTRUCT {
    POINT   pt;
    DWORD   mouseData;
    DWORD   flags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MSLLHOOKSTRUCT,  *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;
typedef struct tagDEBUGHOOKINFO
{
    DWORD   idThread;
    DWORD   idThreadInstaller;
    LPARAM  lParam;
    WPARAM  wParam;
    int     code;
} DEBUGHOOKINFO, *PDEBUGHOOKINFO,  *NPDEBUGHOOKINFO, * LPDEBUGHOOKINFO;
typedef struct tagMOUSEHOOKSTRUCT {
    POINT   pt;
    HWND    hwnd;
    UINT    wHitTestCode;
    ULONG_PTR dwExtraInfo;
} MOUSEHOOKSTRUCT,  *LPMOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;
typedef struct tagMOUSEHOOKSTRUCTEX
{
    MOUSEHOOKSTRUCT;
    DWORD   mouseData;
} MOUSEHOOKSTRUCTEX, *LPMOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX;
typedef struct tagHARDWAREHOOKSTRUCT {
    HWND    hwnd;
    UINT    message;
    WPARAM  wParam;
    LPARAM  lParam;
} HARDWAREHOOKSTRUCT,  *LPHARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT;

HKL

LoadKeyboardLayoutA(
     LPCSTR pwszKLID,
     UINT Flags);

HKL

LoadKeyboardLayoutW(
     LPCWSTR pwszKLID,
     UINT Flags);

HKL

ActivateKeyboardLayout(
     HKL hkl,
     UINT Flags);

int

ToUnicodeEx(
     UINT wVirtKey,
     UINT wScanCode,
     const BYTE *lpKeyState,
     LPWSTR pwszBuff,
     int cchBuff,
     UINT wFlags,
     HKL dwhkl);

BOOL

UnloadKeyboardLayout(
     HKL hkl);

BOOL

GetKeyboardLayoutNameA(
     LPSTR pwszKLID);

BOOL

GetKeyboardLayoutNameW(
     LPWSTR pwszKLID);

int

GetKeyboardLayoutList(
     int nBuff,
     HKL  *lpList);

HKL

GetKeyboardLayout(
     DWORD idThread);
typedef struct tagMOUSEMOVEPOINT {
    int   x;
    int   y;
    DWORD time;
    ULONG_PTR dwExtraInfo;
} MOUSEMOVEPOINT, *PMOUSEMOVEPOINT, * LPMOUSEMOVEPOINT;

int

GetMouseMovePointsEx(
     UINT cbSize,
     LPMOUSEMOVEPOINT lppt,
     LPMOUSEMOVEPOINT lpptBuf,
     int nBufPoints,
     DWORD resolution);

HDESK

CreateDesktopA(
     LPCSTR lpszDesktop,
     LPCSTR lpszDevice,
     LPDEVMODEA pDevmode,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa);

HDESK

CreateDesktopW(
     LPCWSTR lpszDesktop,
     LPCWSTR lpszDevice,
     LPDEVMODEW pDevmode,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa);

HDESK

CreateDesktopExA(
     LPCSTR lpszDesktop,
     LPCSTR lpszDevice,
     LPDEVMODEA pDevmode,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa,
     ULONG ulHeapSize,
     PVOID pvoid);

HDESK

CreateDesktopExW(
     LPCWSTR lpszDesktop,
     LPCWSTR lpszDevice,
     LPDEVMODEW pDevmode,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa,
     ULONG ulHeapSize,
     PVOID pvoid);

HDESK

OpenDesktopA(
     LPCSTR lpszDesktop,
     DWORD dwFlags,
     BOOL fInherit,
     ACCESS_MASK dwDesiredAccess);

HDESK

OpenDesktopW(
     LPCWSTR lpszDesktop,
     DWORD dwFlags,
     BOOL fInherit,
     ACCESS_MASK dwDesiredAccess);

HDESK

OpenInputDesktop(
     DWORD dwFlags,
     BOOL fInherit,
     ACCESS_MASK dwDesiredAccess);

BOOL

EnumDesktopsA(
     HWINSTA hwinsta,
     DESKTOPENUMPROCA lpEnumFunc,
     LPARAM lParam);

BOOL

EnumDesktopsW(
     HWINSTA hwinsta,
     DESKTOPENUMPROCW lpEnumFunc,
     LPARAM lParam);

BOOL

EnumDesktopWindows(
     HDESK hDesktop,
     WNDENUMPROC lpfn,
     LPARAM lParam);

BOOL

SwitchDesktop(
     HDESK hDesktop);

BOOL

SetThreadDesktop(
      HDESK hDesktop);

BOOL

CloseDesktop(
     HDESK hDesktop);

HDESK

GetThreadDesktop(
     DWORD dwThreadId);

HWINSTA

CreateWindowStationA(
     LPCSTR lpwinsta,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa);

HWINSTA

CreateWindowStationW(
     LPCWSTR lpwinsta,
     DWORD dwFlags,
     ACCESS_MASK dwDesiredAccess,
     LPSECURITY_ATTRIBUTES lpsa);

HWINSTA

OpenWindowStationA(
     LPCSTR lpszWinSta,
     BOOL fInherit,
     ACCESS_MASK dwDesiredAccess);

HWINSTA

OpenWindowStationW(
     LPCWSTR lpszWinSta,
     BOOL fInherit,
     ACCESS_MASK dwDesiredAccess);

BOOL

EnumWindowStationsA(
     WINSTAENUMPROCA lpEnumFunc,
     LPARAM lParam);

BOOL

EnumWindowStationsW(
     WINSTAENUMPROCW lpEnumFunc,
     LPARAM lParam);

BOOL

CloseWindowStation(
     HWINSTA hWinSta);

BOOL

SetProcessWindowStation(
     HWINSTA hWinSta);

HWINSTA

GetProcessWindowStation(
    void);

BOOL

SetUserObjectSecurity(
     HANDLE hObj,
     PSECURITY_INFORMATION pSIRequested,
     PSECURITY_DESCRIPTOR pSID);

BOOL

GetUserObjectSecurity(
     HANDLE hObj,
     PSECURITY_INFORMATION pSIRequested,
     PSECURITY_DESCRIPTOR pSID,
     DWORD nLength,
     LPDWORD lpnLengthNeeded);
typedef struct tagUSEROBJECTFLAGS {
    BOOL fInherit;
    BOOL fReserved;
    DWORD dwFlags;
} USEROBJECTFLAGS, *PUSEROBJECTFLAGS;

BOOL

GetUserObjectInformationA(
     HANDLE hObj,
     int nIndex,
     PVOID pvInfo,
     DWORD nLength,
     LPDWORD lpnLengthNeeded);

BOOL

GetUserObjectInformationW(
     HANDLE hObj,
     int nIndex,
     PVOID pvInfo,
     DWORD nLength,
     LPDWORD lpnLengthNeeded);

BOOL

SetUserObjectInformationA(
     HANDLE hObj,
     int nIndex,
     PVOID pvInfo,
     DWORD nLength);

BOOL

SetUserObjectInformationW(
     HANDLE hObj,
     int nIndex,
     PVOID pvInfo,
     DWORD nLength);
typedef struct tagWNDCLASSEXA {
    UINT        cbSize;
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCSTR      lpszMenuName;
    LPCSTR      lpszClassName;
    HICON       hIconSm;
} WNDCLASSEXA, *PWNDCLASSEXA,  *NPWNDCLASSEXA,  *LPWNDCLASSEXA;
typedef struct tagWNDCLASSEXW {
    UINT        cbSize;
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
    HICON       hIconSm;
} WNDCLASSEXW, *PWNDCLASSEXW,  *NPWNDCLASSEXW,  *LPWNDCLASSEXW;
typedef WNDCLASSEXA WNDCLASSEX;
typedef PWNDCLASSEXA PWNDCLASSEX;
typedef NPWNDCLASSEXA NPWNDCLASSEX;
typedef LPWNDCLASSEXA LPWNDCLASSEX;
typedef struct tagWNDCLASSA {
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCSTR      lpszMenuName;
    LPCSTR      lpszClassName;
} WNDCLASSA, *PWNDCLASSA,  *NPWNDCLASSA,  *LPWNDCLASSA;
typedef struct tagWNDCLASSW {
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
} WNDCLASSW, *PWNDCLASSW,  *NPWNDCLASSW,  *LPWNDCLASSW;
typedef WNDCLASSA WNDCLASS;
typedef PWNDCLASSA PWNDCLASS;
typedef NPWNDCLASSA NPWNDCLASS;
typedef LPWNDCLASSA LPWNDCLASS;

BOOL

IsHungAppWindow(
     HWND hwnd);

void

DisableProcessWindowsGhosting(
    void);
typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
} MSG, *PMSG,  *NPMSG,  *LPMSG;
typedef struct tagMINMAXINFO {
    POINT ptReserved;
    POINT ptMaxSize;
    POINT ptMaxPosition;
    POINT ptMinTrackSize;
    POINT ptMaxTrackSize;
} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;
typedef struct tagCOPYDATASTRUCT {
    ULONG_PTR dwData;
    DWORD cbData;
     PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
typedef struct tagMDINEXTMENU
{
    HMENU   hmenuIn;
    HMENU   hmenuNext;
    HWND    hwndNext;
} MDINEXTMENU, * PMDINEXTMENU,  * LPMDINEXTMENU;
typedef struct {
    GUID PowerSetting;
    DWORD DataLength;
    UCHAR Data[1];
} POWERBROADCAST_SETTING, *PPOWERBROADCAST_SETTING;

UINT

RegisterWindowMessageA(
     LPCSTR lpString);

UINT

RegisterWindowMessageW(
     LPCWSTR lpString);
typedef struct tagWINDOWPOS {
    HWND    hwnd;
    HWND    hwndInsertAfter;
    int     x;
    int     y;
    int     cx;
    int     cy;
    UINT    flags;
} WINDOWPOS, *LPWINDOWPOS, *PWINDOWPOS;
typedef struct tagNCCALCSIZE_PARAMS {
    RECT       rgrc[3];
    PWINDOWPOS lppos;
} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;
typedef struct tagTRACKMOUSEEVENT {
    DWORD cbSize;
    DWORD dwFlags;
    HWND  hwndTrack;
    DWORD dwHoverTime;
} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;

BOOL

TrackMouseEvent(
     LPTRACKMOUSEEVENT lpEventTrack);

BOOL

DrawEdge(
     HDC hdc,
     LPRECT qrc,
     UINT edge,
     UINT grfFlags);

BOOL

DrawFrameControl(
     HDC,
     LPRECT,
     UINT,
     UINT);

BOOL

DrawCaption(
     HWND hwnd,
     HDC hdc,
     const RECT * lprect,
     UINT flags);

BOOL

DrawAnimatedRects(
     HWND hwnd,
     int idAni,
     const RECT *lprcFrom,
     const RECT *lprcTo);
typedef struct tagACCEL {
    BYTE   fVirt;
    WORD   key;
    WORD   cmd;
} ACCEL, *LPACCEL;
typedef struct tagPAINTSTRUCT {
    HDC         hdc;
    BOOL        fErase;
    RECT        rcPaint;
    BOOL        fRestore;
    BOOL        fIncUpdate;
    BYTE        rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;
typedef struct tagCREATESTRUCTA {
    LPVOID      lpCreateParams;
    HINSTANCE   hInstance;
    HMENU       hMenu;
    HWND        hwndParent;
    int         cy;
    int         cx;
    int         y;
    int         x;
    LONG        style;
    LPCSTR      lpszName;
    LPCSTR      lpszClass;
    DWORD       dwExStyle;
} CREATESTRUCTA, *LPCREATESTRUCTA;
typedef struct tagCREATESTRUCTW {
    LPVOID      lpCreateParams;
    HINSTANCE   hInstance;
    HMENU       hMenu;
    HWND        hwndParent;
    int         cy;
    int         cx;
    int         y;
    int         x;
    LONG        style;
    LPCWSTR     lpszName;
    LPCWSTR     lpszClass;
    DWORD       dwExStyle;
} CREATESTRUCTW, *LPCREATESTRUCTW;
typedef CREATESTRUCTA CREATESTRUCT;
typedef LPCREATESTRUCTA LPCREATESTRUCT;
typedef struct tagWINDOWPLACEMENT {
    UINT  length;
    UINT  flags;
    UINT  showCmd;
    POINT ptMinPosition;
    POINT ptMaxPosition;
    RECT  rcNormalPosition;
} WINDOWPLACEMENT;
typedef WINDOWPLACEMENT *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;
typedef struct tagNMHDR
{
    HWND      hwndFrom;
    UINT_PTR  idFrom;
    UINT      code;
}   NMHDR;
typedef NMHDR  * LPNMHDR;
typedef struct tagSTYLESTRUCT
{
    DWORD   styleOld;
    DWORD   styleNew;
} STYLESTRUCT, * LPSTYLESTRUCT;
typedef struct tagMEASUREITEMSTRUCT {
    UINT       CtlType;
    UINT       CtlID;
    UINT       itemID;
    UINT       itemWidth;
    UINT       itemHeight;
    ULONG_PTR  itemData;
} MEASUREITEMSTRUCT,  *PMEASUREITEMSTRUCT,  *LPMEASUREITEMSTRUCT;
typedef struct tagDRAWITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    UINT        itemID;
    UINT        itemAction;
    UINT        itemState;
    HWND        hwndItem;
    HDC         hDC;
    RECT        rcItem;
    ULONG_PTR   itemData;
} DRAWITEMSTRUCT,  *PDRAWITEMSTRUCT,  *LPDRAWITEMSTRUCT;
typedef struct tagDELETEITEMSTRUCT {
    UINT       CtlType;
    UINT       CtlID;
    UINT       itemID;
    HWND       hwndItem;
    ULONG_PTR  itemData;
} DELETEITEMSTRUCT,  *PDELETEITEMSTRUCT,  *LPDELETEITEMSTRUCT;
typedef struct tagCOMPAREITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    HWND        hwndItem;
    UINT        itemID1;
    ULONG_PTR   itemData1;
    UINT        itemID2;
    ULONG_PTR   itemData2;
    DWORD       dwLocaleId;
} COMPAREITEMSTRUCT,  *PCOMPAREITEMSTRUCT,  *LPCOMPAREITEMSTRUCT;

BOOL

GetMessageA(
     LPMSG lpMsg,
     HWND hWnd,
     UINT wMsgFilterMin,
     UINT wMsgFilterMax);

BOOL

GetMessageW(
     LPMSG lpMsg,
     HWND hWnd,
     UINT wMsgFilterMin,
     UINT wMsgFilterMax);

BOOL

TranslateMessage(
     const MSG *lpMsg);

LRESULT

DispatchMessageA(
     const MSG *lpMsg);

LRESULT

DispatchMessageW(
     const MSG *lpMsg);

BOOL

SetMessageQueue(
     int cMessagesMax);

BOOL

PeekMessageA(
     LPMSG lpMsg,
     HWND hWnd,
     UINT wMsgFilterMin,
     UINT wMsgFilterMax,
     UINT wRemoveMsg);

BOOL

PeekMessageW(
     LPMSG lpMsg,
     HWND hWnd,
     UINT wMsgFilterMin,
     UINT wMsgFilterMax,
     UINT wRemoveMsg);

BOOL

RegisterHotKey(
     HWND hWnd,
     int id,
     UINT fsModifiers,
     UINT vk);

BOOL

UnregisterHotKey(
     HWND hWnd,
     int id);

BOOL

ExitWindowsEx(
     UINT uFlags,
     DWORD dwReason);

BOOL

SwapMouseButton(
     BOOL fSwap);

DWORD

GetMessagePos(
    void);

LONG

GetMessageTime(
    void);

LPARAM

GetMessageExtraInfo(
    void);

BOOL

IsWow64Message(
    void);

LPARAM

SetMessageExtraInfo(
     LPARAM lParam);

LRESULT

SendMessageA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

SendMessageW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

SendMessageTimeoutA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     UINT fuFlags,
     UINT uTimeout,
     PDWORD_PTR lpdwResult);

LRESULT

SendMessageTimeoutW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     UINT fuFlags,
     UINT uTimeout,
     PDWORD_PTR lpdwResult);

BOOL

SendNotifyMessageA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

SendNotifyMessageW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

SendMessageCallbackA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     SENDASYNCPROC lpResultCallBack,
     ULONG_PTR dwData);

BOOL

SendMessageCallbackW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     SENDASYNCPROC lpResultCallBack,
     ULONG_PTR dwData);
typedef struct {
    UINT  cbSize;
    HDESK hdesk;
    HWND  hwnd;
    LUID  luid;
} BSMINFO, *PBSMINFO;

long

BroadcastSystemMessageExA(
     DWORD flags,
     LPDWORD lpInfo,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     PBSMINFO pbsmInfo);

long

BroadcastSystemMessageExW(
     DWORD flags,
     LPDWORD lpInfo,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam,
     PBSMINFO pbsmInfo);

long

BroadcastSystemMessageA(
     DWORD flags,
     LPDWORD lpInfo,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

long

BroadcastSystemMessageW(
     DWORD flags,
     LPDWORD lpInfo,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);
typedef  PVOID           HDEVNOTIFY;
typedef  HDEVNOTIFY     *PHDEVNOTIFY;

HDEVNOTIFY

RegisterDeviceNotificationA(
     HANDLE hRecipient,
     LPVOID NotificationFilter,
     DWORD Flags);

HDEVNOTIFY

RegisterDeviceNotificationW(
     HANDLE hRecipient,
     LPVOID NotificationFilter,
     DWORD Flags);

BOOL

UnregisterDeviceNotification(
     HDEVNOTIFY Handle
    );
typedef  PVOID           HPOWERNOTIFY;
typedef  HPOWERNOTIFY   *PHPOWERNOTIFY;

HPOWERNOTIFY

RegisterPowerSettingNotification(
     HANDLE hRecipient,
     LPCGUID PowerSettingGuid,
     DWORD Flags
    );

BOOL

UnregisterPowerSettingNotification(
     HPOWERNOTIFY Handle
    );

BOOL

PostMessageA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

PostMessageW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

PostThreadMessageA(
     DWORD idThread,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

PostThreadMessageW(
     DWORD idThread,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

AttachThreadInput(
     DWORD idAttach,
     DWORD idAttachTo,
     BOOL fAttach);

BOOL

ReplyMessage(
     LRESULT lResult);

BOOL

WaitMessage(
    void);

DWORD

WaitForInputIdle(
     HANDLE hProcess,
     DWORD dwMilliseconds);

LRESULT

DefWindowProcA(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

DefWindowProcW(
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

void

PostQuitMessage(
     int nExitCode);

LRESULT

CallWindowProcA(
     WNDPROC lpPrevWndFunc,
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

CallWindowProcW(
     WNDPROC lpPrevWndFunc,
     HWND hWnd,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

InSendMessage(
    void);

DWORD

InSendMessageEx(
     LPVOID lpReserved);

UINT

GetDoubleClickTime(
    void);

BOOL

SetDoubleClickTime(
     UINT);

ATOM

RegisterClassA(
     const WNDCLASSA *lpWndClass);

ATOM

RegisterClassW(
     const WNDCLASSW *lpWndClass);

BOOL

UnregisterClassA(
     LPCSTR lpClassName,
     HINSTANCE hInstance);

BOOL

UnregisterClassW(
     LPCWSTR lpClassName,
     HINSTANCE hInstance);

BOOL

GetClassInfoA(
     HINSTANCE hInstance,
     LPCSTR lpClassName,
     LPWNDCLASSA lpWndClass);

BOOL

GetClassInfoW(
     HINSTANCE hInstance,
     LPCWSTR lpClassName,
     LPWNDCLASSW lpWndClass);

ATOM

RegisterClassExA(
     const WNDCLASSEXA *);

ATOM

RegisterClassExW(
     const WNDCLASSEXW *);

BOOL

GetClassInfoExA(
     HINSTANCE hInstance,
     LPCSTR lpszClass,
     LPWNDCLASSEXA lpwcx);

BOOL

GetClassInfoExW(
     HINSTANCE hInstance,
     LPCWSTR lpszClass,
     LPWNDCLASSEXW lpwcx);
typedef BOOLEAN ( * PREGISTERCLASSNAMEW)(LPCWSTR);

HWND

CreateWindowExA(
     DWORD dwExStyle,
     LPCSTR lpClassName,
     LPCSTR lpWindowName,
     DWORD dwStyle,
     int X,
     int Y,
     int nWidth,
     int nHeight,
     HWND hWndParent,
     HMENU hMenu,
     HINSTANCE hInstance,
     LPVOID lpParam);

HWND

CreateWindowExW(
     DWORD dwExStyle,
     LPCWSTR lpClassName,
     LPCWSTR lpWindowName,
     DWORD dwStyle,
     int X,
     int Y,
     int nWidth,
     int nHeight,
     HWND hWndParent,
     HMENU hMenu,
     HINSTANCE hInstance,
     LPVOID lpParam);

BOOL

IsWindow(
     HWND hWnd);

BOOL

IsMenu(
     HMENU hMenu);

BOOL

IsChild(
     HWND hWndParent,
     HWND hWnd);

BOOL

DestroyWindow(
     HWND hWnd);

BOOL

ShowWindow(
     HWND hWnd,
     int nCmdShow);

BOOL

AnimateWindow(
     HWND hWnd,
     DWORD dwTime,
     DWORD dwFlags);

BOOL

UpdateLayeredWindow(
     HWND hWnd,
     HDC hdcDst,
     POINT *pptDst,
     SIZE *psize,
     HDC hdcSrc,
     POINT *pptSrc,
     COLORREF crKey,
     BLENDFUNCTION *pblend,
     DWORD dwFlags);
typedef struct tagUPDATELAYEREDWINDOWINFO
{
                    DWORD               cbSize;
                HDC                 hdcDst;
      POINT const         *pptDst;
      SIZE const          *psize;
                HDC                 hdcSrc;
      POINT const         *pptSrc;
                COLORREF            crKey;
      BLENDFUNCTION const *pblend;
                    DWORD               dwFlags;
      RECT const          *prcDirty;
} UPDATELAYEREDWINDOWINFO, *PUPDATELAYEREDWINDOWINFO;

BOOL

UpdateLayeredWindowIndirect(
     HWND hWnd,
     UPDATELAYEREDWINDOWINFO const *pULWInfo);

BOOL

GetLayeredWindowAttributes(
     HWND hwnd,
     COLORREF *pcrKey,
     BYTE *pbAlpha,
     DWORD *pdwFlags);

BOOL

PrintWindow(
      HWND hwnd,
      HDC hdcBlt,
      UINT nFlags);

BOOL

SetLayeredWindowAttributes(
     HWND hwnd,
     COLORREF crKey,
     BYTE bAlpha,
     DWORD dwFlags);

BOOL

ShowWindowAsync(
      HWND hWnd,
      int nCmdShow);

BOOL

FlashWindow(
      HWND hWnd,
      BOOL bInvert);
typedef struct {
    UINT  cbSize;
    HWND  hwnd;
    DWORD dwFlags;
    UINT  uCount;
    DWORD dwTimeout;
} FLASHWINFO, *PFLASHWINFO;

BOOL

FlashWindowEx(
     PFLASHWINFO pfwi);

BOOL

ShowOwnedPopups(
      HWND hWnd,
      BOOL fShow);

BOOL

OpenIcon(
      HWND hWnd);

BOOL

CloseWindow(
      HWND hWnd);

BOOL

MoveWindow(
     HWND hWnd,
     int X,
     int Y,
     int nWidth,
     int nHeight,
     BOOL bRepaint);

BOOL

SetWindowPos(
     HWND hWnd,
     HWND hWndInsertAfter,
     int X,
     int Y,
     int cx,
     int cy,
     UINT uFlags);

BOOL

GetWindowPlacement(
     HWND hWnd,
     WINDOWPLACEMENT *lpwndpl);

BOOL

SetWindowPlacement(
     HWND hWnd,
     const WINDOWPLACEMENT *lpwndpl);

HDWP

BeginDeferWindowPos(
     int nNumWindows);

HDWP

DeferWindowPos(
     HDWP hWinPosInfo,
     HWND hWnd,
     HWND hWndInsertAfter,
     int x,
     int y,
     int cx,
     int cy,
     UINT uFlags);

BOOL

EndDeferWindowPos(
     HDWP hWinPosInfo);

BOOL

IsWindowVisible(
     HWND hWnd);

BOOL

IsIconic(
     HWND hWnd);

BOOL

AnyPopup(
    void);

BOOL

BringWindowToTop(
     HWND hWnd);

BOOL

IsZoomed(
     HWND hWnd);
typedef struct {
    DWORD style;
    DWORD dwExtendedStyle;
    WORD cdit;
    short x;
    short y;
    short cx;
    short cy;
} DLGTEMPLATE;
typedef DLGTEMPLATE *LPDLGTEMPLATEA;
typedef DLGTEMPLATE *LPDLGTEMPLATEW;
typedef LPDLGTEMPLATEA LPDLGTEMPLATE;
typedef const DLGTEMPLATE *LPCDLGTEMPLATEA;
typedef const DLGTEMPLATE *LPCDLGTEMPLATEW;
typedef LPCDLGTEMPLATEA LPCDLGTEMPLATE;
typedef struct {
    DWORD style;
    DWORD dwExtendedStyle;
    short x;
    short y;
    short cx;
    short cy;
    WORD id;
} DLGITEMTEMPLATE;
typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA;
typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW;
typedef PDLGITEMTEMPLATEA PDLGITEMTEMPLATE;
typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA;
typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW;
typedef LPDLGITEMTEMPLATEA LPDLGITEMTEMPLATE;

HWND

CreateDialogParamA(
     HINSTANCE hInstance,
     LPCSTR lpTemplateName,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

HWND

CreateDialogParamW(
     HINSTANCE hInstance,
     LPCWSTR lpTemplateName,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

HWND

CreateDialogIndirectParamA(
     HINSTANCE hInstance,
     LPCDLGTEMPLATEA lpTemplate,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

HWND

CreateDialogIndirectParamW(
     HINSTANCE hInstance,
     LPCDLGTEMPLATEW lpTemplate,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

INT_PTR

DialogBoxParamA(
     HINSTANCE hInstance,
     LPCSTR lpTemplateName,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

INT_PTR

DialogBoxParamW(
     HINSTANCE hInstance,
     LPCWSTR lpTemplateName,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

INT_PTR

DialogBoxIndirectParamA(
     HINSTANCE hInstance,
     LPCDLGTEMPLATEA hDialogTemplate,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

INT_PTR

DialogBoxIndirectParamW(
     HINSTANCE hInstance,
     LPCDLGTEMPLATEW hDialogTemplate,
     HWND hWndParent,
     DLGPROC lpDialogFunc,
     LPARAM dwInitParam);

BOOL

EndDialog(
     HWND hDlg,
     INT_PTR nResult);

HWND

GetDlgItem(
     HWND hDlg,
     int nIDDlgItem);

BOOL

SetDlgItemInt(
     HWND hDlg,
     int nIDDlgItem,
     UINT uValue,
     BOOL bSigned);

UINT

GetDlgItemInt(
     HWND hDlg,
     int nIDDlgItem,
     BOOL *lpTranslated,
     BOOL bSigned);

BOOL

SetDlgItemTextA(
     HWND hDlg,
     int nIDDlgItem,
     LPCSTR lpString);

BOOL

SetDlgItemTextW(
     HWND hDlg,
     int nIDDlgItem,
     LPCWSTR lpString);

UINT

GetDlgItemTextA(
     HWND hDlg,
     int nIDDlgItem,
     LPSTR lpString,
     int cchMax);

UINT

GetDlgItemTextW(
     HWND hDlg,
     int nIDDlgItem,
     LPWSTR lpString,
     int cchMax);

BOOL

CheckDlgButton(
     HWND hDlg,
     int nIDButton,
     UINT uCheck);

BOOL

CheckRadioButton(
     HWND hDlg,
     int nIDFirstButton,
     int nIDLastButton,
     int nIDCheckButton);

UINT

IsDlgButtonChecked(
     HWND hDlg,
     int nIDButton);

LRESULT

SendDlgItemMessageA(
     HWND hDlg,
     int nIDDlgItem,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

SendDlgItemMessageW(
     HWND hDlg,
     int nIDDlgItem,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

HWND

GetNextDlgGroupItem(
     HWND hDlg,
     HWND hCtl,
     BOOL bPrevious);

HWND

GetNextDlgTabItem(
     HWND hDlg,
     HWND hCtl,
     BOOL bPrevious);

int

GetDlgCtrlID(
     HWND hWnd);

long

GetDialogBaseUnits(void);

LRESULT

DefDlgProcA(
     HWND hDlg,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

DefDlgProcW(
     HWND hDlg,
     UINT Msg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

CallMsgFilterA(
     LPMSG lpMsg,
     int nCode);

BOOL

CallMsgFilterW(
     LPMSG lpMsg,
     int nCode);

BOOL

OpenClipboard(
     HWND hWndNewOwner);

BOOL

CloseClipboard(
    void);

DWORD

GetClipboardSequenceNumber(
    void);

HWND

GetClipboardOwner(
    void);

HWND

SetClipboardViewer(
     HWND hWndNewViewer);

HWND

GetClipboardViewer(
    void);

BOOL

ChangeClipboardChain(
     HWND hWndRemove,
     HWND hWndNewNext);

HANDLE

SetClipboardData(
     UINT uFormat,
     HANDLE hMem);

HANDLE

GetClipboardData(
     UINT uFormat);

UINT

RegisterClipboardFormatA(
     LPCSTR lpszFormat);

UINT

RegisterClipboardFormatW(
     LPCWSTR lpszFormat);

int

CountClipboardFormats(
    void);

UINT

EnumClipboardFormats(
     UINT format);

int

GetClipboardFormatNameA(
     UINT format,
     LPSTR lpszFormatName,
     int cchMaxCount);

int

GetClipboardFormatNameW(
     UINT format,
     LPWSTR lpszFormatName,
     int cchMaxCount);

BOOL

EmptyClipboard(
    void);

BOOL

IsClipboardFormatAvailable(
     UINT format);

int

GetPriorityClipboardFormat(
     UINT *paFormatPriorityList,
     int cFormats);

HWND

GetOpenClipboardWindow(
    void);

BOOL

CharToOemA(
     LPCSTR pSrc,
     LPSTR pDst);

BOOL

CharToOemW(
     LPCWSTR pSrc,
     LPSTR pDst);

BOOL

OemToCharA(
     LPCSTR pSrc,
     LPSTR pDst);

BOOL

OemToCharW(
     LPCSTR pSrc,
     LPWSTR pDst);

BOOL

CharToOemBuffA(
     LPCSTR lpszSrc,
     LPSTR lpszDst,
     DWORD cchDstLength);

BOOL

CharToOemBuffW(
     LPCWSTR lpszSrc,
     LPSTR lpszDst,
     DWORD cchDstLength);

BOOL

OemToCharBuffA(
     LPCSTR lpszSrc,
     LPSTR lpszDst,
     DWORD cchDstLength);

BOOL

OemToCharBuffW(
     LPCSTR lpszSrc,
     LPWSTR lpszDst,
     DWORD cchDstLength);

LPSTR

CharUpperA(
     LPSTR lpsz);

LPWSTR

CharUpperW(
     LPWSTR lpsz);

DWORD

CharUpperBuffA(
     LPSTR lpsz,
     DWORD cchLength);

DWORD

CharUpperBuffW(
     LPWSTR lpsz,
     DWORD cchLength);

LPSTR

CharLowerA(
     LPSTR lpsz);

LPWSTR

CharLowerW(
     LPWSTR lpsz);

DWORD

CharLowerBuffA(
     LPSTR lpsz,
     DWORD cchLength);

DWORD

CharLowerBuffW(
     LPWSTR lpsz,
     DWORD cchLength);

LPSTR

CharNextA(
     LPCSTR lpsz);

LPWSTR

CharNextW(
     LPCWSTR lpsz);

LPSTR

CharPrevA(
     LPCSTR lpszStart,
     LPCSTR lpszCurrent);

LPWSTR

CharPrevW(
     LPCWSTR lpszStart,
     LPCWSTR lpszCurrent);

LPSTR

CharNextExA(
      WORD CodePage,
      LPCSTR lpCurrentChar,
      DWORD dwFlags);

LPSTR

CharPrevExA(
      WORD CodePage,
      LPCSTR lpStart,
      LPCSTR lpCurrentChar,
      DWORD dwFlags);

BOOL

IsCharAlphaA(
     CHAR ch);

BOOL

IsCharAlphaW(
     WCHAR ch);

BOOL

IsCharAlphaNumericA(
     CHAR ch);

BOOL

IsCharAlphaNumericW(
     WCHAR ch);

BOOL

IsCharUpperA(
     CHAR ch);

BOOL

IsCharUpperW(
     WCHAR ch);

BOOL

IsCharLowerA(
     CHAR ch);

BOOL

IsCharLowerW(
     WCHAR ch);

HWND

SetFocus(
     HWND hWnd);

HWND

GetActiveWindow(
    void);

HWND

GetFocus(
    void);

UINT

GetKBCodePage(
    void);

SHORT

GetKeyState(
     int nVirtKey);

SHORT

GetAsyncKeyState(
     int vKey);

BOOL

GetKeyboardState(
     PBYTE lpKeyState);

BOOL

SetKeyboardState(
     LPBYTE lpKeyState);

int

GetKeyNameTextA(
     LONG lParam,
     LPSTR lpString,
     int cchSize);

int

GetKeyNameTextW(
     LONG lParam,
     LPWSTR lpString,
     int cchSize);

int

GetKeyboardType(
     int nTypeFlag);

int

ToAscii(
     UINT uVirtKey,
     UINT uScanCode,
     const BYTE *lpKeyState,
     LPWORD lpChar,
     UINT uFlags);

int

ToAsciiEx(
     UINT uVirtKey,
     UINT uScanCode,
     const BYTE *lpKeyState,
     LPWORD lpChar,
     UINT uFlags,
     HKL dwhkl);

int

ToUnicode(
     UINT wVirtKey,
     UINT wScanCode,
     const BYTE *lpKeyState,
     LPWSTR pwszBuff,
     int cchBuff,
     UINT wFlags);

DWORD

OemKeyScan(
     WORD wOemChar);

SHORT

VkKeyScanA(
     CHAR ch);

SHORT

VkKeyScanW(
     WCHAR ch);

SHORT

VkKeyScanExA(
     CHAR ch,
     HKL dwhkl);

SHORT

VkKeyScanExW(
     WCHAR ch,
     HKL dwhkl);

void

keybd_event(
     BYTE bVk,
     BYTE bScan,
     DWORD dwFlags,
     ULONG_PTR dwExtraInfo);

void

mouse_event(
     DWORD dwFlags,
     DWORD dx,
     DWORD dy,
     DWORD dwData,
     ULONG_PTR dwExtraInfo);
typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, * LPMOUSEINPUT;
typedef struct tagKEYBDINPUT {
    WORD    wVk;
    WORD    wScan;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT, * LPKEYBDINPUT;
typedef struct tagHARDWAREINPUT {
    DWORD   uMsg;
    WORD    wParamL;
    WORD    wParamH;
} HARDWAREINPUT, *PHARDWAREINPUT, * LPHARDWAREINPUT;
typedef struct tagINPUT {
    DWORD   type;
    union
    {
        MOUSEINPUT      mi;
        KEYBDINPUT      ki;
        HARDWAREINPUT   hi;
    };
} INPUT, *PINPUT, * LPINPUT;

UINT

SendInput(
     UINT cInputs,
     LPINPUT pInputs,
     int cbSize);
typedef struct tagLASTINPUTINFO {
    UINT cbSize;
    DWORD dwTime;
} LASTINPUTINFO, * PLASTINPUTINFO;

BOOL

GetLastInputInfo(
     PLASTINPUTINFO plii);

UINT

MapVirtualKeyA(
     UINT uCode,
     UINT uMapType);

UINT

MapVirtualKeyW(
     UINT uCode,
     UINT uMapType);

UINT

MapVirtualKeyExA(
     UINT uCode,
     UINT uMapType,
     HKL dwhkl);

UINT

MapVirtualKeyExW(
     UINT uCode,
     UINT uMapType,
     HKL dwhkl);

BOOL

GetInputState(
    void);

DWORD

GetQueueStatus(
     UINT flags);

HWND

GetCapture(
    void);

HWND

SetCapture(
     HWND hWnd);

BOOL

ReleaseCapture(
    void);

DWORD

MsgWaitForMultipleObjects(
     DWORD nCount,
     const HANDLE *pHandles,
     BOOL fWaitAll,
     DWORD dwMilliseconds,
     DWORD dwWakeMask);

DWORD

MsgWaitForMultipleObjectsEx(
     DWORD nCount,
     const HANDLE *pHandles,
     DWORD dwMilliseconds,
     DWORD dwWakeMask,
     DWORD dwFlags);

UINT_PTR

SetTimer(
     HWND hWnd,
     UINT_PTR nIDEvent,
     UINT uElapse,
     TIMERPROC lpTimerFunc);

BOOL

KillTimer(
     HWND hWnd,
     UINT_PTR uIDEvent);

BOOL

IsWindowUnicode(
     HWND hWnd);

BOOL

EnableWindow(
     HWND hWnd,
     BOOL bEnable);

BOOL

IsWindowEnabled(
     HWND hWnd);

HACCEL

LoadAcceleratorsA(
     HINSTANCE hInstance,
     LPCSTR lpTableName);

HACCEL

LoadAcceleratorsW(
     HINSTANCE hInstance,
     LPCWSTR lpTableName);

HACCEL

CreateAcceleratorTableA(
     LPACCEL paccel,
     int cAccel);

HACCEL

CreateAcceleratorTableW(
     LPACCEL paccel,
     int cAccel);

BOOL

DestroyAcceleratorTable(
     HACCEL hAccel);

int

CopyAcceleratorTableA(
     HACCEL hAccelSrc,
     LPACCEL lpAccelDst,
     int cAccelEntries);

int

CopyAcceleratorTableW(
     HACCEL hAccelSrc,
     LPACCEL lpAccelDst,
     int cAccelEntries);

int

TranslateAcceleratorA(
     HWND hWnd,
     HACCEL hAccTable,
     LPMSG lpMsg);

int

TranslateAcceleratorW(
     HWND hWnd,
     HACCEL hAccTable,
     LPMSG lpMsg);

int

GetSystemMetrics(
     int nIndex);

HMENU

LoadMenuA(
     HINSTANCE hInstance,
     LPCSTR lpMenuName);

HMENU

LoadMenuW(
     HINSTANCE hInstance,
     LPCWSTR lpMenuName);

HMENU

LoadMenuIndirectA(
     const MENUTEMPLATEA *lpMenuTemplate);

HMENU

LoadMenuIndirectW(
     const MENUTEMPLATEW *lpMenuTemplate);

HMENU

GetMenu(
     HWND hWnd);

BOOL

SetMenu(
     HWND hWnd,
     HMENU hMenu);

BOOL

ChangeMenuA(
     HMENU hMenu,
     UINT cmd,
     LPCSTR lpszNewItem,
     UINT cmdInsert,
     UINT flags);

BOOL

ChangeMenuW(
     HMENU hMenu,
     UINT cmd,
     LPCWSTR lpszNewItem,
     UINT cmdInsert,
     UINT flags);

BOOL

HiliteMenuItem(
     HWND hWnd,
     HMENU hMenu,
     UINT uIDHiliteItem,
     UINT uHilite);

int

GetMenuStringA(
     HMENU hMenu,
     UINT uIDItem,
     LPSTR lpString,
     int cchMax,
     UINT flags);

int

GetMenuStringW(
     HMENU hMenu,
     UINT uIDItem,
     LPWSTR lpString,
     int cchMax,
     UINT flags);

UINT

GetMenuState(
     HMENU hMenu,
     UINT uId,
     UINT uFlags);

BOOL

DrawMenuBar(
     HWND hWnd);

HMENU

GetSystemMenu(
     HWND hWnd,
     BOOL bRevert);

HMENU

CreateMenu(
    void);

HMENU

CreatePopupMenu(
    void);

BOOL

DestroyMenu(
     HMENU hMenu);

DWORD

CheckMenuItem(
     HMENU hMenu,
     UINT uIDCheckItem,
     UINT uCheck);

BOOL

EnableMenuItem(
     HMENU hMenu,
     UINT uIDEnableItem,
     UINT uEnable);

HMENU

GetSubMenu(
     HMENU hMenu,
     int nPos);

UINT

GetMenuItemID(
     HMENU hMenu,
     int nPos);

int

GetMenuItemCount(
     HMENU hMenu);

BOOL

InsertMenuA(
     HMENU hMenu,
     UINT uPosition,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCSTR lpNewItem);

BOOL

InsertMenuW(
     HMENU hMenu,
     UINT uPosition,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCWSTR lpNewItem);

BOOL

AppendMenuA(
     HMENU hMenu,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCSTR lpNewItem);

BOOL

AppendMenuW(
     HMENU hMenu,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCWSTR lpNewItem);

BOOL

ModifyMenuA(
     HMENU hMnu,
     UINT uPosition,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCSTR lpNewItem);

BOOL

ModifyMenuW(
     HMENU hMnu,
     UINT uPosition,
     UINT uFlags,
     UINT_PTR uIDNewItem,
     LPCWSTR lpNewItem);

BOOL
 RemoveMenu(
     HMENU hMenu,
     UINT uPosition,
     UINT uFlags);

BOOL

DeleteMenu(
     HMENU hMenu,
     UINT uPosition,
     UINT uFlags);

BOOL

SetMenuItemBitmaps(
     HMENU hMenu,
     UINT uPosition,
     UINT uFlags,
     HBITMAP hBitmapUnchecked,
     HBITMAP hBitmapChecked);

LONG

GetMenuCheckMarkDimensions(
    void);

BOOL

TrackPopupMenu(
     HMENU hMenu,
     UINT uFlags,
     int x,
     int y,
     int nReserved,
     HWND hWnd,
     const RECT *prcRect);
typedef struct tagTPMPARAMS
{
    UINT    cbSize;
    RECT    rcExclude;
}   TPMPARAMS;
typedef TPMPARAMS  *LPTPMPARAMS;

BOOL

TrackPopupMenuEx(
     HMENU,
     UINT,
     int,
     int,
     HWND,
     LPTPMPARAMS);
typedef struct tagMENUINFO
{
    DWORD   cbSize;
    DWORD   fMask;
    DWORD   dwStyle;
    UINT    cyMax;
    HBRUSH  hbrBack;
    DWORD   dwContextHelpID;
    ULONG_PTR dwMenuData;
}   MENUINFO,  *LPMENUINFO;
typedef MENUINFO const  *LPCMENUINFO;

BOOL

GetMenuInfo(
     HMENU,
     LPMENUINFO);

BOOL

SetMenuInfo(
     HMENU,
     LPCMENUINFO);

BOOL

EndMenu(
        void);
typedef struct tagMENUGETOBJECTINFO
{
    DWORD dwFlags;
    UINT uPos;
    HMENU hmenu;
    PVOID riid;
    PVOID pvObj;
} MENUGETOBJECTINFO, * PMENUGETOBJECTINFO;
typedef struct tagMENUITEMINFOA
{
    UINT     cbSize;
    UINT     fMask;
    UINT     fType;
    UINT     fState;
    UINT     wID;
    HMENU    hSubMenu;
    HBITMAP  hbmpChecked;
    HBITMAP  hbmpUnchecked;
    ULONG_PTR dwItemData;
     LPSTR    dwTypeData;
    UINT     cch;
    HBITMAP  hbmpItem;
}   MENUITEMINFOA,  *LPMENUITEMINFOA;
typedef struct tagMENUITEMINFOW
{
    UINT     cbSize;
    UINT     fMask;
    UINT     fType;
    UINT     fState;
    UINT     wID;
    HMENU    hSubMenu;
    HBITMAP  hbmpChecked;
    HBITMAP  hbmpUnchecked;
    ULONG_PTR dwItemData;
     LPWSTR   dwTypeData;
    UINT     cch;
    HBITMAP  hbmpItem;
}   MENUITEMINFOW,  *LPMENUITEMINFOW;
typedef MENUITEMINFOA MENUITEMINFO;
typedef LPMENUITEMINFOA LPMENUITEMINFO;
typedef MENUITEMINFOA const  *LPCMENUITEMINFOA;
typedef MENUITEMINFOW const  *LPCMENUITEMINFOW;
typedef LPCMENUITEMINFOA LPCMENUITEMINFO;

BOOL

InsertMenuItemA(
     HMENU hmenu,
     UINT item,
     BOOL fByPosition,
     LPCMENUITEMINFOA lpmi);

BOOL

InsertMenuItemW(
     HMENU hmenu,
     UINT item,
     BOOL fByPosition,
     LPCMENUITEMINFOW lpmi);

BOOL

GetMenuItemInfoA(
     HMENU hmenu,
     UINT item,
     BOOL fByPosition,
     LPMENUITEMINFOA lpmii);

BOOL

GetMenuItemInfoW(
     HMENU hmenu,
     UINT item,
     BOOL fByPosition,
     LPMENUITEMINFOW lpmii);

BOOL

SetMenuItemInfoA(
     HMENU hmenu,
     UINT item,
     BOOL fByPositon,
     LPCMENUITEMINFOA lpmii);

BOOL

SetMenuItemInfoW(
     HMENU hmenu,
     UINT item,
     BOOL fByPositon,
     LPCMENUITEMINFOW lpmii);

UINT

GetMenuDefaultItem(
     HMENU hMenu,
     UINT fByPos,
     UINT gmdiFlags);

BOOL

SetMenuDefaultItem(
     HMENU hMenu,
     UINT uItem,
     UINT fByPos);

BOOL

GetMenuItemRect(
     HWND hWnd,
     HMENU hMenu,
     UINT uItem,
     LPRECT lprcItem);

int

MenuItemFromPoint(
     HWND hWnd,
     HMENU hMenu,
     POINT ptScreen);
typedef struct tagDROPSTRUCT
{
    HWND    hwndSource;
    HWND    hwndSink;
    DWORD   wFmt;
    ULONG_PTR dwData;
    POINT   ptDrop;
    DWORD   dwControlData;
} DROPSTRUCT, *PDROPSTRUCT, *LPDROPSTRUCT;

DWORD

DragObject(
     HWND hwndParent,
     HWND hwndFrom,
     UINT fmt,
     ULONG_PTR data,
     HCURSOR hcur);

BOOL

DragDetect(
     HWND hwnd,
     POINT pt);

BOOL

DrawIcon(
     HDC hDC,
     int X,
     int Y,
     HICON hIcon);
typedef struct tagDRAWTEXTPARAMS
{
    UINT    cbSize;
    int     iTabLength;
    int     iLeftMargin;
    int     iRightMargin;
    UINT    uiLengthDrawn;
} DRAWTEXTPARAMS,  *LPDRAWTEXTPARAMS;

int

DrawTextA(
     HDC hdc,
     LPCSTR lpchText,
     int cchText,
     LPRECT lprc,
     UINT format);

int

DrawTextW(
     HDC hdc,
     LPCWSTR lpchText,
     int cchText,
     LPRECT lprc,
     UINT format);

int

DrawTextExA(
     HDC hdc,
     LPSTR lpchText,
     int cchText,
     LPRECT lprc,
     UINT format,
     LPDRAWTEXTPARAMS lpdtp);

int

DrawTextExW(
     HDC hdc,
     LPWSTR lpchText,
     int cchText,
     LPRECT lprc,
     UINT format,
     LPDRAWTEXTPARAMS lpdtp);

BOOL

GrayStringA(
     HDC hDC,
     HBRUSH hBrush,
     GRAYSTRINGPROC lpOutputFunc,
     LPARAM lpData,
     int nCount,
     int X,
     int Y,
     int nWidth,
     int nHeight);

BOOL

GrayStringW(
     HDC hDC,
     HBRUSH hBrush,
     GRAYSTRINGPROC lpOutputFunc,
     LPARAM lpData,
     int nCount,
     int X,
     int Y,
     int nWidth,
     int nHeight);

BOOL

DrawStateA(
     HDC hdc,
     HBRUSH hbrFore,
     DRAWSTATEPROC qfnCallBack,
     LPARAM lData,
     WPARAM wData,
     int x,
     int y,
     int cx,
     int cy,
     UINT uFlags);

BOOL

DrawStateW(
     HDC hdc,
     HBRUSH hbrFore,
     DRAWSTATEPROC qfnCallBack,
     LPARAM lData,
     WPARAM wData,
     int x,
     int y,
     int cx,
     int cy,
     UINT uFlags);

LONG

TabbedTextOutA(
     HDC hdc,
     int x,
     int y,
     LPCSTR lpString,
     int chCount,
     int nTabPositions,
     const INT *lpnTabStopPositions,
     int nTabOrigin);

LONG

TabbedTextOutW(
     HDC hdc,
     int x,
     int y,
     LPCWSTR lpString,
     int chCount,
     int nTabPositions,
     const INT *lpnTabStopPositions,
     int nTabOrigin);

DWORD

GetTabbedTextExtentA(
     HDC hdc,
     LPCSTR lpString,
     int chCount,
     int nTabPositions,
     const INT *lpnTabStopPositions);

DWORD

GetTabbedTextExtentW(
     HDC hdc,
     LPCWSTR lpString,
     int chCount,
     int nTabPositions,
     const INT *lpnTabStopPositions);

BOOL

UpdateWindow(
     HWND hWnd);

HWND

SetActiveWindow(
     HWND hWnd);

HWND

GetForegroundWindow(
    void);

BOOL

PaintDesktop(
     HDC hdc);

void

SwitchToThisWindow(
     HWND hwnd,
     BOOL fUnknown);

BOOL

SetForegroundWindow(
     HWND hWnd);

BOOL

AllowSetForegroundWindow(
     DWORD dwProcessId);

BOOL

LockSetForegroundWindow(
     UINT uLockCode);

HWND

WindowFromDC(
     HDC hDC);

HDC

GetDC(
     HWND hWnd);

HDC

GetDCEx(
     HWND hWnd,
     HRGN hrgnClip,
     DWORD flags);

HDC

GetWindowDC(
     HWND hWnd);

int

ReleaseDC(
     HWND hWnd,
     HDC hDC);

HDC

BeginPaint(
     HWND hWnd,
     LPPAINTSTRUCT lpPaint);

BOOL

EndPaint(
     HWND hWnd,
     const PAINTSTRUCT *lpPaint);

BOOL

GetUpdateRect(
     HWND hWnd,
     LPRECT lpRect,
     BOOL bErase);

int

GetUpdateRgn(
     HWND hWnd,
     HRGN hRgn,
     BOOL bErase);

int

SetWindowRgn(
     HWND hWnd,
     HRGN hRgn,
     BOOL bRedraw);

int

GetWindowRgn(
     HWND hWnd,
     HRGN hRgn);

int

GetWindowRgnBox(
     HWND hWnd,
     LPRECT lprc);

int

ExcludeUpdateRgn(
     HDC hDC,
     HWND hWnd);

BOOL

InvalidateRect(
     HWND hWnd,
     const RECT *lpRect,
     BOOL bErase);

BOOL

ValidateRect(
     HWND hWnd,
     const RECT *lpRect);

BOOL

InvalidateRgn(
     HWND hWnd,
     HRGN hRgn,
     BOOL bErase);

BOOL

ValidateRgn(
     HWND hWnd,
     HRGN hRgn);

BOOL

RedrawWindow(
     HWND hWnd,
     const RECT *lprcUpdate,
     HRGN hrgnUpdate,
     UINT flags);

BOOL

LockWindowUpdate(
     HWND hWndLock);

BOOL

ScrollWindow(
     HWND hWnd,
     int XAmount,
     int YAmount,
     const RECT *lpRect,
     const RECT *lpClipRect);

BOOL

ScrollDC(
     HDC hDC,
     int dx,
     int dy,
     const RECT *lprcScroll,
     const RECT *lprcClip,
     HRGN hrgnUpdate,
     LPRECT lprcUpdate);

int

ScrollWindowEx(
     HWND hWnd,
     int dx,
     int dy,
     const RECT *prcScroll,
     const RECT *prcClip,
     HRGN hrgnUpdate,
     LPRECT prcUpdate,
     UINT flags);

int

SetScrollPos(
     HWND hWnd,
     int nBar,
     int nPos,
     BOOL bRedraw);

int

GetScrollPos(
     HWND hWnd,
     int nBar);

BOOL

SetScrollRange(
     HWND hWnd,
     int nBar,
     int nMinPos,
     int nMaxPos,
     BOOL bRedraw);

BOOL

GetScrollRange(
     HWND hWnd,
     int nBar,
     LPINT lpMinPos,
     LPINT lpMaxPos);

BOOL

ShowScrollBar(
     HWND hWnd,
     int wBar,
     BOOL bShow);

BOOL

EnableScrollBar(
     HWND hWnd,
     UINT wSBflags,
     UINT wArrows);

BOOL

SetPropA(
     HWND hWnd,
     LPCSTR lpString,
     HANDLE hData);

BOOL

SetPropW(
     HWND hWnd,
     LPCWSTR lpString,
     HANDLE hData);

HANDLE

GetPropA(
     HWND hWnd,
     LPCSTR lpString);

HANDLE

GetPropW(
     HWND hWnd,
     LPCWSTR lpString);

HANDLE

RemovePropA(
     HWND hWnd,
     LPCSTR lpString);

HANDLE

RemovePropW(
     HWND hWnd,
     LPCWSTR lpString);

int

EnumPropsExA(
     HWND hWnd,
     PROPENUMPROCEXA lpEnumFunc,
     LPARAM lParam);

int

EnumPropsExW(
     HWND hWnd,
     PROPENUMPROCEXW lpEnumFunc,
     LPARAM lParam);

int

EnumPropsA(
     HWND hWnd,
     PROPENUMPROCA lpEnumFunc);

int

EnumPropsW(
     HWND hWnd,
     PROPENUMPROCW lpEnumFunc);

BOOL

SetWindowTextA(
     HWND hWnd,
     LPCSTR lpString);

BOOL

SetWindowTextW(
     HWND hWnd,
     LPCWSTR lpString);

int

GetWindowTextA(
     HWND hWnd,
     LPSTR lpString,
     int nMaxCount);

int

GetWindowTextW(
     HWND hWnd,
     LPWSTR lpString,
     int nMaxCount);

int

GetWindowTextLengthA(
     HWND hWnd);

int

GetWindowTextLengthW(
     HWND hWnd);

BOOL

GetClientRect(
     HWND hWnd,
     LPRECT lpRect);

BOOL

GetWindowRect(
     HWND hWnd,
     LPRECT lpRect);

BOOL

AdjustWindowRect(
     LPRECT lpRect,
     DWORD dwStyle,
     BOOL bMenu);

BOOL

AdjustWindowRectEx(
     LPRECT lpRect,
     DWORD dwStyle,
     BOOL bMenu,
     DWORD dwExStyle);
typedef struct tagHELPINFO
{
    UINT    cbSize;
    int     iContextType;
    int     iCtrlId;
    HANDLE  hItemHandle;
    DWORD_PTR dwContextId;
    POINT   MousePos;
}  HELPINFO,  *LPHELPINFO;

BOOL

SetWindowContextHelpId(
     HWND,
     DWORD);

DWORD

GetWindowContextHelpId(
     HWND);

BOOL

SetMenuContextHelpId(
     HMENU,
     DWORD);

DWORD

GetMenuContextHelpId(
     HMENU);

int

MessageBoxA(
     HWND hWnd,
     LPCSTR lpText,
     LPCSTR lpCaption,
     UINT uType);

int

MessageBoxW(
     HWND hWnd,
     LPCWSTR lpText,
     LPCWSTR lpCaption,
     UINT uType);

int

MessageBoxExA(
     HWND hWnd,
     LPCSTR lpText,
     LPCSTR lpCaption,
     UINT uType,
     WORD wLanguageId);

int

MessageBoxExW(
     HWND hWnd,
     LPCWSTR lpText,
     LPCWSTR lpCaption,
     UINT uType,
     WORD wLanguageId);
typedef void ( *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo);
typedef struct tagMSGBOXPARAMSA
{
    UINT        cbSize;
    HWND        hwndOwner;
    HINSTANCE   hInstance;
    LPCSTR      lpszText;
    LPCSTR      lpszCaption;
    DWORD       dwStyle;
    LPCSTR      lpszIcon;
    DWORD_PTR   dwContextHelpId;
    MSGBOXCALLBACK      lpfnMsgBoxCallback;
    DWORD       dwLanguageId;
} MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA;
typedef struct tagMSGBOXPARAMSW
{
    UINT        cbSize;
    HWND        hwndOwner;
    HINSTANCE   hInstance;
    LPCWSTR     lpszText;
    LPCWSTR     lpszCaption;
    DWORD       dwStyle;
    LPCWSTR     lpszIcon;
    DWORD_PTR   dwContextHelpId;
    MSGBOXCALLBACK      lpfnMsgBoxCallback;
    DWORD       dwLanguageId;
} MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW;
typedef MSGBOXPARAMSA MSGBOXPARAMS;
typedef PMSGBOXPARAMSA PMSGBOXPARAMS;
typedef LPMSGBOXPARAMSA LPMSGBOXPARAMS;

int

MessageBoxIndirectA(
     const MSGBOXPARAMSA * lpmbp);

int

MessageBoxIndirectW(
     const MSGBOXPARAMSW * lpmbp);

BOOL

MessageBeep(
     UINT uType);

int

ShowCursor(
     BOOL bShow);

BOOL

SetCursorPos(
     int X,
     int Y);

BOOL

SetPhysicalCursorPos(
     int X,
     int Y);

HCURSOR

SetCursor(
     HCURSOR hCursor);

BOOL

GetCursorPos(
     LPPOINT lpPoint);

BOOL

GetPhysicalCursorPos(
     LPPOINT lpPoint);

BOOL

ClipCursor(
     const RECT *lpRect);

BOOL

GetClipCursor(
     LPRECT lpRect);

HCURSOR

GetCursor(
    void);

BOOL

CreateCaret(
     HWND hWnd,
     HBITMAP hBitmap,
     int nWidth,
     int nHeight);

UINT

GetCaretBlinkTime(
    void);

BOOL

SetCaretBlinkTime(
     UINT uMSeconds);

BOOL

DestroyCaret(
    void);

BOOL

HideCaret(
     HWND hWnd);

BOOL

ShowCaret(
     HWND hWnd);

BOOL

SetCaretPos(
     int X,
     int Y);

BOOL

GetCaretPos(
     LPPOINT lpPoint);

BOOL

ClientToScreen(
     HWND hWnd,
     LPPOINT lpPoint);

BOOL

ScreenToClient(
     HWND hWnd,
     LPPOINT lpPoint);

int

MapWindowPoints(
     HWND hWndFrom,
     HWND hWndTo,
     LPPOINT lpPoints,
     UINT cPoints);

HWND

WindowFromPoint(
     POINT Point);

HWND

ChildWindowFromPoint(
     HWND hWndParent,
     POINT Point);

HWND

ChildWindowFromPointEx(
     HWND hwnd,
     POINT pt,
     UINT flags);

DWORD

GetSysColor(
     int nIndex);

HBRUSH

GetSysColorBrush(
     int nIndex);

BOOL

SetSysColors(
     int cElements,
     const INT * lpaElements,
     const COLORREF * lpaRgbValues);

BOOL

DrawFocusRect(
     HDC hDC,
     const RECT * lprc);

int

FillRect(
     HDC hDC,
     const RECT *lprc,
     HBRUSH hbr);

int

FrameRect(
     HDC hDC,
     const RECT *lprc,
     HBRUSH hbr);

BOOL

InvertRect(
     HDC hDC,
     const RECT *lprc);

BOOL

SetRect(
     LPRECT lprc,
     int xLeft,
     int yTop,
     int xRight,
     int yBottom);

BOOL

SetRectEmpty(
     LPRECT lprc);

BOOL

CopyRect(
     LPRECT lprcDst,
     const RECT *lprcSrc);

BOOL

InflateRect(
     LPRECT lprc,
     int dx,
     int dy);

BOOL

IntersectRect(
     LPRECT lprcDst,
     const RECT *lprcSrc1,
     const RECT *lprcSrc2);

BOOL

UnionRect(
     LPRECT lprcDst,
     const RECT *lprcSrc1,
     const RECT *lprcSrc2);

BOOL

SubtractRect(
     LPRECT lprcDst,
     const RECT *lprcSrc1,
     const RECT *lprcSrc2);

BOOL

OffsetRect(
     LPRECT lprc,
     int dx,
     int dy);

BOOL

IsRectEmpty(
     const RECT *lprc);

BOOL

EqualRect(
     const RECT *lprc1,
     const RECT *lprc2);

BOOL

PtInRect(
     const RECT *lprc,
     POINT pt);

WORD

GetWindowWord(
     HWND hWnd,
     int nIndex);

WORD

SetWindowWord(
     HWND hWnd,
     int nIndex,
     WORD wNewWord);

LONG

GetWindowLongA(
     HWND hWnd,
     int nIndex);

LONG

GetWindowLongW(
     HWND hWnd,
     int nIndex);

LONG

SetWindowLongA(
     HWND hWnd,
     int nIndex,
     LONG dwNewLong);

LONG

SetWindowLongW(
     HWND hWnd,
     int nIndex,
     LONG dwNewLong);

WORD

GetClassWord(
     HWND hWnd,
     int nIndex);

WORD

SetClassWord(
     HWND hWnd,
     int nIndex,
     WORD wNewWord);

DWORD

GetClassLongA(
     HWND hWnd,
     int nIndex);

DWORD

GetClassLongW(
     HWND hWnd,
     int nIndex);

DWORD

SetClassLongA(
     HWND hWnd,
     int nIndex,
     LONG dwNewLong);

DWORD

SetClassLongW(
     HWND hWnd,
     int nIndex,
     LONG dwNewLong);

BOOL

GetProcessDefaultLayout(
     DWORD *pdwDefaultLayout);

BOOL

SetProcessDefaultLayout(
     DWORD dwDefaultLayout);

HWND

GetDesktopWindow(
    void);

HWND

GetParent(
     HWND hWnd);

HWND

SetParent(
     HWND hWndChild,
     HWND hWndNewParent);

BOOL

EnumChildWindows(
     HWND hWndParent,
     WNDENUMPROC lpEnumFunc,
     LPARAM lParam);

HWND

FindWindowA(
     LPCSTR lpClassName,
     LPCSTR lpWindowName);

HWND

FindWindowW(
     LPCWSTR lpClassName,
     LPCWSTR lpWindowName);

HWND

FindWindowExA(
     HWND hWndParent,
     HWND hWndChildAfter,
     LPCSTR lpszClass,
     LPCSTR lpszWindow);

HWND

FindWindowExW(
     HWND hWndParent,
     HWND hWndChildAfter,
     LPCWSTR lpszClass,
     LPCWSTR lpszWindow);

HWND

GetShellWindow(
    void);

BOOL

RegisterShellHookWindow(
     HWND hwnd);

BOOL

DeregisterShellHookWindow(
     HWND hwnd);

BOOL

EnumWindows(
     WNDENUMPROC lpEnumFunc,
     LPARAM lParam);

BOOL

EnumThreadWindows(
     DWORD dwThreadId,
     WNDENUMPROC lpfn,
     LPARAM lParam);

int

GetClassNameA(
     HWND hWnd,
     LPSTR lpClassName,
     int nMaxCount
    );

int

GetClassNameW(
     HWND hWnd,
     LPWSTR lpClassName,
     int nMaxCount
    );

HWND

GetTopWindow(
     HWND hWnd);

DWORD

GetWindowThreadProcessId(
     HWND hWnd,
     LPDWORD lpdwProcessId);

BOOL

IsGUIThread(
     BOOL bConvert);

HWND

GetLastActivePopup(
     HWND hWnd);

HWND

GetWindow(
     HWND hWnd,
     UINT uCmd);

HHOOK

SetWindowsHookA(
     int nFilterType,
     HOOKPROC pfnFilterProc);

HHOOK

SetWindowsHookW(
     int nFilterType,
     HOOKPROC pfnFilterProc);

BOOL

UnhookWindowsHook(
     int nCode,
     HOOKPROC pfnFilterProc);

HHOOK

SetWindowsHookExA(
     int idHook,
     HOOKPROC lpfn,
     HINSTANCE hmod,
     DWORD dwThreadId);

HHOOK

SetWindowsHookExW(
     int idHook,
     HOOKPROC lpfn,
     HINSTANCE hmod,
     DWORD dwThreadId);

BOOL

UnhookWindowsHookEx(
     HHOOK hhk);

LRESULT

CallNextHookEx(
     HHOOK hhk,
     int nCode,
     WPARAM wParam,
     LPARAM lParam);

BOOL

CheckMenuRadioItem(
     HMENU hmenu,
     UINT first,
     UINT last,
     UINT check,
     UINT flags);
typedef struct {
    WORD versionNumber;
    WORD offset;
} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER;
typedef struct {
    WORD mtOption;
    WORD mtID;
    WCHAR mtString[1];
} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE;

HBITMAP

LoadBitmapA(
     HINSTANCE hInstance,
     LPCSTR lpBitmapName);

HBITMAP

LoadBitmapW(
     HINSTANCE hInstance,
     LPCWSTR lpBitmapName);

HCURSOR

LoadCursorA(
     HINSTANCE hInstance,
     LPCSTR lpCursorName);

HCURSOR

LoadCursorW(
     HINSTANCE hInstance,
     LPCWSTR lpCursorName);

HCURSOR

LoadCursorFromFileA(
     LPCSTR lpFileName);

HCURSOR

LoadCursorFromFileW(
     LPCWSTR lpFileName);

HCURSOR

CreateCursor(
     HINSTANCE hInst,
     int xHotSpot,
     int yHotSpot,
     int nWidth,
     int nHeight,
     const void *pvANDPlane,
     const void *pvXORPlane);

BOOL

DestroyCursor(
     HCURSOR hCursor);

BOOL

SetSystemCursor(
     HCURSOR hcur,
     DWORD id);
typedef struct _ICONINFO {
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
} ICONINFO;
typedef ICONINFO *PICONINFO;

HICON

LoadIconA(
     HINSTANCE hInstance,
     LPCSTR lpIconName);

HICON

LoadIconW(
     HINSTANCE hInstance,
     LPCWSTR lpIconName);

UINT

PrivateExtractIconsA(
     LPCSTR szFileName,
     int nIconIndex,
     int cxIcon,
     int cyIcon,
     HICON *phicon,
     UINT *piconid,
     UINT nIcons,
     UINT flags);

UINT

PrivateExtractIconsW(
     LPCWSTR szFileName,
     int nIconIndex,
     int cxIcon,
     int cyIcon,
     HICON *phicon,
     UINT *piconid,
     UINT nIcons,
     UINT flags);

HICON

CreateIcon(
     HINSTANCE hInstance,
     int nWidth,
     int nHeight,
     BYTE cPlanes,
     BYTE cBitsPixel,
     const BYTE *lpbANDbits,
     const BYTE *lpbXORbits);

BOOL

DestroyIcon(
     HICON hIcon);

int

LookupIconIdFromDirectory(
     PBYTE presbits,
     BOOL fIcon);

int

LookupIconIdFromDirectoryEx(
     PBYTE presbits,
     BOOL fIcon,
     int cxDesired,
     int cyDesired,
     UINT Flags);

HICON

CreateIconFromResource(
     PBYTE presbits,
     DWORD dwResSize,
     BOOL fIcon,
     DWORD dwVer);

HICON

CreateIconFromResourceEx(
     PBYTE presbits,
     DWORD dwResSize,
     BOOL fIcon,
     DWORD dwVer,
     int cxDesired,
     int cyDesired,
     UINT Flags);
typedef struct tagCURSORSHAPE
{
    int     xHotSpot;
    int     yHotSpot;
    int     cx;
    int     cy;
    int     cbWidth;
    BYTE    Planes;
    BYTE    BitsPixel;
} CURSORSHAPE,  *LPCURSORSHAPE;

HANDLE

LoadImageA(
     HINSTANCE hInst,
     LPCSTR name,
     UINT type,
     int cx,
     int cy,
     UINT fuLoad);

HANDLE

LoadImageW(
     HINSTANCE hInst,
     LPCWSTR name,
     UINT type,
     int cx,
     int cy,
     UINT fuLoad);

HANDLE

CopyImage(
     HANDLE h,
     UINT type,
     int cx,
     int cy,
     UINT flags);
 BOOL  DrawIconEx(
     HDC hdc,
     int xLeft,
     int yTop,
     HICON hIcon,
     int cxWidth,
     int cyWidth,
     UINT istepIfAniCur,
     HBRUSH hbrFlickerFreeDraw,
     UINT diFlags);

HICON

CreateIconIndirect(
     PICONINFO piconinfo);

HICON

CopyIcon(
     HICON hIcon);

BOOL

GetIconInfo(
     HICON hIcon,
     PICONINFO piconinfo);
typedef struct _ICONINFOEXA {
    DWORD   cbSize;
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
    WORD    wResID;
    CHAR    szModName[260];
    CHAR    szResName[260];
} ICONINFOEXA, *PICONINFOEXA;
typedef struct _ICONINFOEXW {
    DWORD   cbSize;
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
    WORD    wResID;
    WCHAR   szModName[260];
    WCHAR   szResName[260];
} ICONINFOEXW, *PICONINFOEXW;
typedef ICONINFOEXA ICONINFOEX;
typedef PICONINFOEXA PICONINFOEX;

BOOL

GetIconInfoExA(
     HICON hicon,
     PICONINFOEXA piconinfo);

BOOL

GetIconInfoExW(
     HICON hicon,
     PICONINFOEXW piconinfo);

int

LoadStringA(
     HINSTANCE hInstance,
     UINT uID,
     LPSTR lpBuffer,
     int cchBufferMax);

int

LoadStringW(
     HINSTANCE hInstance,
     UINT uID,
     LPWSTR lpBuffer,
     int cchBufferMax);

BOOL

IsDialogMessageA(
     HWND hDlg,
     LPMSG lpMsg);

BOOL

IsDialogMessageW(
     HWND hDlg,
     LPMSG lpMsg);

BOOL

MapDialogRect(
     HWND hDlg,
     LPRECT lpRect);

int

DlgDirListA(
     HWND hDlg,
     LPSTR lpPathSpec,
     int nIDListBox,
     int nIDStaticPath,
     UINT uFileType);

int

DlgDirListW(
     HWND hDlg,
     LPWSTR lpPathSpec,
     int nIDListBox,
     int nIDStaticPath,
     UINT uFileType);

BOOL

DlgDirSelectExA(
     HWND hwndDlg,
     LPSTR lpString,
     int chCount,
     int idListBox);

BOOL

DlgDirSelectExW(
     HWND hwndDlg,
     LPWSTR lpString,
     int chCount,
     int idListBox);

int

DlgDirListComboBoxA(
     HWND hDlg,
     LPSTR lpPathSpec,
     int nIDComboBox,
     int nIDStaticPath,
     UINT uFiletype);

int

DlgDirListComboBoxW(
     HWND hDlg,
     LPWSTR lpPathSpec,
     int nIDComboBox,
     int nIDStaticPath,
     UINT uFiletype);

BOOL

DlgDirSelectComboBoxExA(
     HWND hwndDlg,
     LPSTR lpString,
     int cchOut,
     int idComboBox);

BOOL

DlgDirSelectComboBoxExW(
     HWND hwndDlg,
     LPWSTR lpString,
     int cchOut,
     int idComboBox);
typedef struct tagSCROLLINFO
{
    UINT    cbSize;
    UINT    fMask;
    int     nMin;
    int     nMax;
    UINT    nPage;
    int     nPos;
    int     nTrackPos;
}   SCROLLINFO,  *LPSCROLLINFO;
typedef SCROLLINFO const  *LPCSCROLLINFO;

int

SetScrollInfo(
     HWND hwnd,
     int nBar,
     LPCSCROLLINFO lpsi,
     BOOL redraw);

BOOL

GetScrollInfo(
     HWND hwnd,
     int nBar,
     LPSCROLLINFO lpsi);
typedef struct tagMDICREATESTRUCTA {
    LPCSTR   szClass;
    LPCSTR   szTitle;
    HANDLE hOwner;
    int x;
    int y;
    int cx;
    int cy;
    DWORD style;
    LPARAM lParam;
} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
typedef struct tagMDICREATESTRUCTW {
    LPCWSTR  szClass;
    LPCWSTR  szTitle;
    HANDLE hOwner;
    int x;
    int y;
    int cx;
    int cy;
    DWORD style;
    LPARAM lParam;
} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
typedef MDICREATESTRUCTA MDICREATESTRUCT;
typedef LPMDICREATESTRUCTA LPMDICREATESTRUCT;
typedef struct tagCLIENTCREATESTRUCT {
    HANDLE hWindowMenu;
    UINT idFirstChild;
} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;

LRESULT

DefFrameProcA(
     HWND hWnd,
     HWND hWndMDIClient,
     UINT uMsg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

DefFrameProcW(
     HWND hWnd,
     HWND hWndMDIClient,
     UINT uMsg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

DefMDIChildProcA(
     HWND hWnd,
     UINT uMsg,
     WPARAM wParam,
     LPARAM lParam);

LRESULT

DefMDIChildProcW(
     HWND hWnd,
     UINT uMsg,
     WPARAM wParam,
     LPARAM lParam);

BOOL

TranslateMDISysAccel(
     HWND hWndClient,
     LPMSG lpMsg);

UINT

ArrangeIconicWindows(
     HWND hWnd);

HWND

CreateMDIWindowA(
     LPCSTR lpClassName,
     LPCSTR lpWindowName,
     DWORD dwStyle,
     int X,
     int Y,
     int nWidth,
     int nHeight,
     HWND hWndParent,
     HINSTANCE hInstance,
     LPARAM lParam);

HWND

CreateMDIWindowW(
     LPCWSTR lpClassName,
     LPCWSTR lpWindowName,
     DWORD dwStyle,
     int X,
     int Y,
     int nWidth,
     int nHeight,
     HWND hWndParent,
     HINSTANCE hInstance,
     LPARAM lParam);

WORD

TileWindows(
     HWND hwndParent,
     UINT wHow,
     const RECT * lpRect,
     UINT cKids,
     const HWND  * lpKids);

WORD
 CascadeWindows(
     HWND hwndParent,
     UINT wHow,
     const RECT * lpRect,
     UINT cKids,
     const HWND  * lpKids);
typedef DWORD HELPPOLY;
typedef struct tagMULTIKEYHELPA {
    DWORD  mkSize;
    CHAR   mkKeylist;
    CHAR   szKeyphrase[1];
} MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
typedef struct tagMULTIKEYHELPW {
    DWORD  mkSize;
    WCHAR  mkKeylist;
    WCHAR  szKeyphrase[1];
} MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
typedef MULTIKEYHELPA MULTIKEYHELP;
typedef PMULTIKEYHELPA PMULTIKEYHELP;
typedef LPMULTIKEYHELPA LPMULTIKEYHELP;
typedef struct tagHELPWININFOA {
    int  wStructSize;
    int  x;
    int  y;
    int  dx;
    int  dy;
    int  wMax;
    CHAR   rgchMember[2];
} HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;
typedef struct tagHELPWININFOW {
    int  wStructSize;
    int  x;
    int  y;
    int  dx;
    int  dy;
    int  wMax;
    WCHAR  rgchMember[2];
} HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
typedef HELPWININFOA HELPWININFO;
typedef PHELPWININFOA PHELPWININFO;
typedef LPHELPWININFOA LPHELPWININFO;

BOOL

WinHelpA(
     HWND hWndMain,
     LPCSTR lpszHelp,
     UINT uCommand,
     ULONG_PTR dwData);

BOOL

WinHelpW(
     HWND hWndMain,
     LPCWSTR lpszHelp,
     UINT uCommand,
     ULONG_PTR dwData);

DWORD

GetGuiResources(
     HANDLE hProcess,
     DWORD uiFlags);
typedef struct tagNONCLIENTMETRICSA
{
    UINT    cbSize;
    int     iBorderWidth;
    int     iScrollWidth;
    int     iScrollHeight;
    int     iCaptionWidth;
    int     iCaptionHeight;
    LOGFONTA lfCaptionFont;
    int     iSmCaptionWidth;
    int     iSmCaptionHeight;
    LOGFONTA lfSmCaptionFont;
    int     iMenuWidth;
    int     iMenuHeight;
    LOGFONTA lfMenuFont;
    LOGFONTA lfStatusFont;
    LOGFONTA lfMessageFont;
}   NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, * LPNONCLIENTMETRICSA;
typedef struct tagNONCLIENTMETRICSW
{
    UINT    cbSize;
    int     iBorderWidth;
    int     iScrollWidth;
    int     iScrollHeight;
    int     iCaptionWidth;
    int     iCaptionHeight;
    LOGFONTW lfCaptionFont;
    int     iSmCaptionWidth;
    int     iSmCaptionHeight;
    LOGFONTW lfSmCaptionFont;
    int     iMenuWidth;
    int     iMenuHeight;
    LOGFONTW lfMenuFont;
    LOGFONTW lfStatusFont;
    LOGFONTW lfMessageFont;
}   NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, * LPNONCLIENTMETRICSW;
typedef NONCLIENTMETRICSA NONCLIENTMETRICS;
typedef PNONCLIENTMETRICSA PNONCLIENTMETRICS;
typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS;
typedef struct tagMINIMIZEDMETRICS
{
    UINT    cbSize;
    int     iWidth;
    int     iHorzGap;
    int     iVertGap;
    int     iArrange;
}   MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;
typedef struct tagICONMETRICSA
{
    UINT    cbSize;
    int     iHorzSpacing;
    int     iVertSpacing;
    int     iTitleWrap;
    LOGFONTA lfFont;
}   ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;
typedef struct tagICONMETRICSW
{
    UINT    cbSize;
    int     iHorzSpacing;
    int     iVertSpacing;
    int     iTitleWrap;
    LOGFONTW lfFont;
}   ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;
typedef ICONMETRICSA ICONMETRICS;
typedef PICONMETRICSA PICONMETRICS;
typedef LPICONMETRICSA LPICONMETRICS;
typedef struct tagANIMATIONINFO
{
    UINT    cbSize;
    int     iMinAnimate;
}   ANIMATIONINFO, *LPANIMATIONINFO;
typedef struct tagSERIALKEYSA
{
    UINT    cbSize;
    DWORD   dwFlags;
    LPSTR     lpszActivePort;
    LPSTR     lpszPort;
    UINT    iBaudRate;
    UINT    iPortState;
    UINT    iActive;
}   SERIALKEYSA, *LPSERIALKEYSA;
typedef struct tagSERIALKEYSW
{
    UINT    cbSize;
    DWORD   dwFlags;
    LPWSTR    lpszActivePort;
    LPWSTR    lpszPort;
    UINT    iBaudRate;
    UINT    iPortState;
    UINT    iActive;
}   SERIALKEYSW, *LPSERIALKEYSW;
typedef SERIALKEYSA SERIALKEYS;
typedef LPSERIALKEYSA LPSERIALKEYS;
typedef struct tagHIGHCONTRASTA
{
    UINT    cbSize;
    DWORD   dwFlags;
    LPSTR   lpszDefaultScheme;
}   HIGHCONTRASTA, *LPHIGHCONTRASTA;
typedef struct tagHIGHCONTRASTW
{
    UINT    cbSize;
    DWORD   dwFlags;
    LPWSTR  lpszDefaultScheme;
}   HIGHCONTRASTW, *LPHIGHCONTRASTW;
typedef HIGHCONTRASTA HIGHCONTRAST;
typedef LPHIGHCONTRASTA LPHIGHCONTRAST;
typedef struct _VIDEOPARAMETERS {
    GUID  Guid;
    ULONG dwOffset;
    ULONG dwCommand;
    ULONG dwFlags;
    ULONG dwMode;
    ULONG dwTVStandard;
    ULONG dwAvailableModes;
    ULONG dwAvailableTVStandard;
    ULONG dwFlickerFilter;
    ULONG dwOverScanX;
    ULONG dwOverScanY;
    ULONG dwMaxUnscaledX;
    ULONG dwMaxUnscaledY;
    ULONG dwPositionX;
    ULONG dwPositionY;
    ULONG dwBrightness;
    ULONG dwContrast;
    ULONG dwCPType;
    ULONG dwCPCommand;
    ULONG dwCPStandard;
    ULONG dwCPKey;
    ULONG bCP_APSTriggerBits;
    UCHAR bOEMCopyProtection[256];
} VIDEOPARAMETERS, *PVIDEOPARAMETERS, *LPVIDEOPARAMETERS;

LONG

ChangeDisplaySettingsA(
     LPDEVMODEA lpDevMode,
     DWORD dwFlags);

LONG

ChangeDisplaySettingsW(
     LPDEVMODEW lpDevMode,
     DWORD dwFlags);

LONG

ChangeDisplaySettingsExA(
     LPCSTR lpszDeviceName,
     LPDEVMODEA lpDevMode,
     HWND hwnd,
     DWORD dwflags,
     LPVOID lParam);

LONG

ChangeDisplaySettingsExW(
     LPCWSTR lpszDeviceName,
     LPDEVMODEW lpDevMode,
     HWND hwnd,
     DWORD dwflags,
     LPVOID lParam);

BOOL

EnumDisplaySettingsA(
     LPCSTR lpszDeviceName,
     DWORD iModeNum,
     LPDEVMODEA lpDevMode);

BOOL

EnumDisplaySettingsW(
     LPCWSTR lpszDeviceName,
     DWORD iModeNum,
     LPDEVMODEW lpDevMode);

BOOL

EnumDisplaySettingsExA(
     LPCSTR lpszDeviceName,
     DWORD iModeNum,
     LPDEVMODEA lpDevMode,
     DWORD dwFlags);

BOOL

EnumDisplaySettingsExW(
     LPCWSTR lpszDeviceName,
     DWORD iModeNum,
     LPDEVMODEW lpDevMode,
     DWORD dwFlags);

BOOL

EnumDisplayDevicesA(
     LPCSTR lpDevice,
     DWORD iDevNum,
     PDISPLAY_DEVICEA lpDisplayDevice,
     DWORD dwFlags);

BOOL

EnumDisplayDevicesW(
     LPCWSTR lpDevice,
     DWORD iDevNum,
     PDISPLAY_DEVICEW lpDisplayDevice,
     DWORD dwFlags);

BOOL

SystemParametersInfoA(
     UINT uiAction,
     UINT uiParam,
     PVOID pvParam,
     UINT fWinIni);

BOOL

SystemParametersInfoW(
     UINT uiAction,
     UINT uiParam,
     PVOID pvParam,
     UINT fWinIni);
typedef struct tagFILTERKEYS
{
    UINT  cbSize;
    DWORD dwFlags;
    DWORD iWaitMSec;
    DWORD iDelayMSec;
    DWORD iRepeatMSec;
    DWORD iBounceMSec;
} FILTERKEYS, *LPFILTERKEYS;
typedef struct tagSTICKYKEYS
{
    UINT  cbSize;
    DWORD dwFlags;
} STICKYKEYS, *LPSTICKYKEYS;
typedef struct tagMOUSEKEYS
{
    UINT cbSize;
    DWORD dwFlags;
    DWORD iMaxSpeed;
    DWORD iTimeToMaxSpeed;
    DWORD iCtrlSpeed;
    DWORD dwReserved1;
    DWORD dwReserved2;
} MOUSEKEYS, *LPMOUSEKEYS;
typedef struct tagACCESSTIMEOUT
{
    UINT  cbSize;
    DWORD dwFlags;
    DWORD iTimeOutMSec;
} ACCESSTIMEOUT, *LPACCESSTIMEOUT;
typedef struct tagSOUNDSENTRYA
{
    UINT cbSize;
    DWORD dwFlags;
    DWORD iFSTextEffect;
    DWORD iFSTextEffectMSec;
    DWORD iFSTextEffectColorBits;
    DWORD iFSGrafEffect;
    DWORD iFSGrafEffectMSec;
    DWORD iFSGrafEffectColor;
    DWORD iWindowsEffect;
    DWORD iWindowsEffectMSec;
    LPSTR   lpszWindowsEffectDLL;
    DWORD iWindowsEffectOrdinal;
} SOUNDSENTRYA, *LPSOUNDSENTRYA;
typedef struct tagSOUNDSENTRYW
{
    UINT cbSize;
    DWORD dwFlags;
    DWORD iFSTextEffect;
    DWORD iFSTextEffectMSec;
    DWORD iFSTextEffectColorBits;
    DWORD iFSGrafEffect;
    DWORD iFSGrafEffectMSec;
    DWORD iFSGrafEffectColor;
    DWORD iWindowsEffect;
    DWORD iWindowsEffectMSec;
    LPWSTR  lpszWindowsEffectDLL;
    DWORD iWindowsEffectOrdinal;
} SOUNDSENTRYW, *LPSOUNDSENTRYW;
typedef SOUNDSENTRYA SOUNDSENTRY;
typedef LPSOUNDSENTRYA LPSOUNDSENTRY;

BOOL

SoundSentry(void);
typedef struct tagTOGGLEKEYS
{
    UINT cbSize;
    DWORD dwFlags;
} TOGGLEKEYS, *LPTOGGLEKEYS;
typedef struct tagAUDIODESCRIPTION {
    UINT cbSize;
    BOOL Enabled;
    LCID Locale;
} AUDIODESCRIPTION, *LPAUDIODESCRIPTION;

void

SetDebugErrorLevel(
     DWORD dwLevel);

void

SetLastErrorEx(
     DWORD dwErrCode,
     DWORD dwType);

int

InternalGetWindowText(
     HWND hWnd,
     LPWSTR pString,
     int cchMaxCount);

BOOL

CancelShutdown(
    void);

HMONITOR

MonitorFromPoint(
     POINT pt,
     DWORD dwFlags);

HMONITOR

MonitorFromRect(
     LPCRECT lprc,
     DWORD dwFlags);

HMONITOR

MonitorFromWindow(
     HWND hwnd,
     DWORD dwFlags);
typedef struct tagMONITORINFO
{
    DWORD   cbSize;
    RECT    rcMonitor;
    RECT    rcWork;
    DWORD   dwFlags;
} MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEXA
{
    MONITORINFO;
    CHAR        szDevice[32];
} MONITORINFOEXA, *LPMONITORINFOEXA;
typedef struct tagMONITORINFOEXW
{
    MONITORINFO;
    WCHAR       szDevice[32];
} MONITORINFOEXW, *LPMONITORINFOEXW;
typedef MONITORINFOEXA MONITORINFOEX;
typedef LPMONITORINFOEXA LPMONITORINFOEX;

BOOL

GetMonitorInfoA(
     HMONITOR hMonitor,
     LPMONITORINFO lpmi);

BOOL

GetMonitorInfoW(
     HMONITOR hMonitor,
     LPMONITORINFO lpmi);
typedef BOOL (* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);

BOOL

EnumDisplayMonitors(
     HDC hdc,
     LPCRECT lprcClip,
     MONITORENUMPROC lpfnEnum,
     LPARAM dwData);

void

NotifyWinEvent(
     DWORD event,
     HWND  hwnd,
     LONG  idObject,
     LONG  idChild);
typedef void (* WINEVENTPROC)(
    HWINEVENTHOOK hWinEventHook,
    DWORD         event,
    HWND          hwnd,
    LONG          idObject,
    LONG          idChild,
    DWORD         idEventThread,
    DWORD         dwmsEventTime);

HWINEVENTHOOK

SetWinEventHook(
     DWORD eventMin,
     DWORD eventMax,
     HMODULE hmodWinEventProc,
     WINEVENTPROC pfnWinEventProc,
     DWORD idProcess,
     DWORD idThread,
     DWORD dwFlags);

BOOL

IsWinEventHookInstalled(
     DWORD event);

BOOL

UnhookWinEvent(
     HWINEVENTHOOK hWinEventHook);
typedef struct tagGUITHREADINFO
{
    DWORD   cbSize;
    DWORD   flags;
    HWND    hwndActive;
    HWND    hwndFocus;
    HWND    hwndCapture;
    HWND    hwndMenuOwner;
    HWND    hwndMoveSize;
    HWND    hwndCaret;
    RECT    rcCaret;
} GUITHREADINFO, *PGUITHREADINFO,  * LPGUITHREADINFO;

BOOL

GetGUIThreadInfo(
     DWORD idThread,
     PGUITHREADINFO pgui);

BOOL

BlockInput(
    BOOL fBlockIt);

BOOL

SetProcessDPIAware(
    void);

BOOL

IsProcessDPIAware(
    void);

UINT

GetWindowModuleFileNameA(
     HWND hwnd,
     LPSTR pszFileName,
     UINT cchFileNameMax);

UINT

GetWindowModuleFileNameW(
     HWND hwnd,
     LPWSTR pszFileName,
     UINT cchFileNameMax);
typedef struct tagCURSORINFO
{
    DWORD   cbSize;
    DWORD   flags;
    HCURSOR hCursor;
    POINT   ptScreenPos;
} CURSORINFO, *PCURSORINFO, *LPCURSORINFO;

BOOL

GetCursorInfo(
     PCURSORINFO pci);
typedef struct tagWINDOWINFO
{
    DWORD cbSize;
    RECT rcWindow;
    RECT rcClient;
    DWORD dwStyle;
    DWORD dwExStyle;
    DWORD dwWindowStatus;
    UINT cxWindowBorders;
    UINT cyWindowBorders;
    ATOM atomWindowType;
    WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;

BOOL

GetWindowInfo(
     HWND hwnd,
     PWINDOWINFO pwi);
typedef struct tagTITLEBARINFO
{
    DWORD cbSize;
    RECT rcTitleBar;
    DWORD rgstate[5 + 1];
} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;

BOOL

GetTitleBarInfo(
     HWND hwnd,
     PTITLEBARINFO pti);
typedef struct tagMENUBARINFO
{
    DWORD cbSize;
    RECT rcBar;
    HMENU hMenu;
    HWND hwndMenu;
    BOOL fBarFocused:1;
    BOOL fFocused:1;
} MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO;

BOOL

GetMenuBarInfo(
     HWND hwnd,
     LONG idObject,
     LONG idItem,
     PMENUBARINFO pmbi);
typedef struct tagSCROLLBARINFO
{
    DWORD cbSize;
    RECT rcScrollBar;
    int dxyLineButton;
    int xyThumbTop;
    int xyThumbBottom;
    int reserved;
    DWORD rgstate[5 + 1];
} SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;

BOOL

GetScrollBarInfo(
     HWND hwnd,
     LONG idObject,
     PSCROLLBARINFO psbi);
typedef struct tagCOMBOBOXINFO
{
    DWORD cbSize;
    RECT rcItem;
    RECT rcButton;
    DWORD stateButton;
    HWND hwndCombo;
    HWND hwndItem;
    HWND hwndList;
} COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;

BOOL

GetComboBoxInfo(
     HWND hwndCombo,
     PCOMBOBOXINFO pcbi);

HWND

GetAncestor(
     HWND hwnd,
     UINT gaFlags);

HWND

RealChildWindowFromPoint(
     HWND hwndParent,
     POINT ptParentClientCoords);

UINT

RealGetWindowClassA(
     HWND hwnd,
     LPSTR ptszClassName,
     UINT cchClassNameMax);

UINT

RealGetWindowClassW(
     HWND hwnd,
     LPWSTR ptszClassName,
     UINT cchClassNameMax);
typedef struct tagALTTABINFO
{
    DWORD cbSize;
    int cItems;
    int cColumns;
    int cRows;
    int iColFocus;
    int iRowFocus;
    int cxItem;
    int cyItem;
    POINT ptStart;
} ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;

BOOL

GetAltTabInfoA(
     HWND hwnd,
     int iItem,
     PALTTABINFO pati,
     LPSTR pszItemText,
     UINT cchItemText);

BOOL

GetAltTabInfoW(
     HWND hwnd,
     int iItem,
     PALTTABINFO pati,
     LPWSTR pszItemText,
     UINT cchItemText);

DWORD

GetListBoxInfo(
     HWND hwnd);

BOOL

LockWorkStation(
    void);

BOOL

UserHandleGrantAccess(
     HANDLE hUserHandle,
     HANDLE hJob,
     BOOL   bGrant);
struct HRAWINPUT__ { int unused; }; typedef struct HRAWINPUT__ *HRAWINPUT;
typedef struct tagRAWINPUTHEADER {
    DWORD dwType;
    DWORD dwSize;
    HANDLE hDevice;
    WPARAM wParam;
} RAWINPUTHEADER, *PRAWINPUTHEADER, *LPRAWINPUTHEADER;
typedef struct tagRAWMOUSE {
    USHORT usFlags;
    union {
        ULONG ulButtons;
        struct  {
            USHORT  usButtonFlags;
            USHORT  usButtonData;
        };
    };
    ULONG ulRawButtons;
    LONG lLastX;
    LONG lLastY;
    ULONG ulExtraInformation;
} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
typedef struct tagRAWKEYBOARD {
    USHORT MakeCode;
    USHORT Flags;
    USHORT Reserved;
    USHORT VKey;
    UINT   Message;
    ULONG ExtraInformation;
} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
typedef struct tagRAWHID {
    DWORD dwSizeHid;
    DWORD dwCount;
    BYTE bRawData[1];
} RAWHID, *PRAWHID, *LPRAWHID;
typedef struct tagRAWINPUT {
    RAWINPUTHEADER header;
    union {
        RAWMOUSE    mouse;
        RAWKEYBOARD keyboard;
        RAWHID      hid;
    } data;
} RAWINPUT, *PRAWINPUT, *LPRAWINPUT;

UINT

GetRawInputData(
     HRAWINPUT hRawInput,
     UINT uiCommand,
     LPVOID pData,
     PUINT pcbSize,
     UINT cbSizeHeader);
typedef struct tagRID_DEVICE_INFO_MOUSE {
    DWORD dwId;
    DWORD dwNumberOfButtons;
    DWORD dwSampleRate;
    BOOL  fHasHorizontalWheel;
} RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;
typedef struct tagRID_DEVICE_INFO_KEYBOARD {
    DWORD dwType;
    DWORD dwSubType;
    DWORD dwKeyboardMode;
    DWORD dwNumberOfFunctionKeys;
    DWORD dwNumberOfIndicators;
    DWORD dwNumberOfKeysTotal;
} RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;
typedef struct tagRID_DEVICE_INFO_HID {
    DWORD dwVendorId;
    DWORD dwProductId;
    DWORD dwVersionNumber;
    USHORT usUsagePage;
    USHORT usUsage;
} RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;
typedef struct tagRID_DEVICE_INFO {
    DWORD cbSize;
    DWORD dwType;
    union {
        RID_DEVICE_INFO_MOUSE mouse;
        RID_DEVICE_INFO_KEYBOARD keyboard;
        RID_DEVICE_INFO_HID hid;
    };
} RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;

UINT

GetRawInputDeviceInfoA(
     HANDLE hDevice,
     UINT uiCommand,
     LPVOID pData,
     PUINT pcbSize);

UINT

GetRawInputDeviceInfoW(
     HANDLE hDevice,
     UINT uiCommand,
     LPVOID pData,
     PUINT pcbSize);

UINT

GetRawInputBuffer(
     PRAWINPUT pData,
     PUINT pcbSize,
     UINT cbSizeHeader);
typedef struct tagRAWINPUTDEVICE {
    USHORT usUsagePage;
    USHORT usUsage;
    DWORD dwFlags;
    HWND hwndTarget;
} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;
typedef const RAWINPUTDEVICE* PCRAWINPUTDEVICE;

BOOL

RegisterRawInputDevices(
     PCRAWINPUTDEVICE pRawInputDevices,
     UINT uiNumDevices,
     UINT cbSize);

UINT

GetRegisteredRawInputDevices(
     PRAWINPUTDEVICE pRawInputDevices,
     PUINT puiNumDevices,
     UINT cbSize);
typedef struct tagRAWINPUTDEVICELIST {
    HANDLE hDevice;
    DWORD dwType;
} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;

UINT

GetRawInputDeviceList(
     PRAWINPUTDEVICELIST pRawInputDeviceList,
     PUINT puiNumDevices,
     UINT cbSize);

LRESULT

DefRawInputProc(
     PRAWINPUT* paRawInput,
     INT nInput,
     UINT cbSizeHeader);

BOOL

ShutdownBlockReasonCreate(
     HWND hWnd,
     LPCWSTR pwszReason);

BOOL

ShutdownBlockReasonQuery(
     HWND hWnd,
     LPWSTR pwszBuff,
     DWORD *pcchBuff);

BOOL

ShutdownBlockReasonDestroy(
     HWND hWnd);
typedef DWORD LGRPID;
typedef DWORD LCTYPE;
typedef DWORD CALTYPE;
typedef DWORD CALID;
typedef struct _cpinfo {
    UINT    MaxCharSize;
    BYTE    DefaultChar[2];
    BYTE    LeadByte[12];
} CPINFO, *LPCPINFO;
typedef struct _cpinfoexA {
    UINT    MaxCharSize;
    BYTE    DefaultChar[2];
    BYTE    LeadByte[12];
    WCHAR   UnicodeDefaultChar;
    UINT    CodePage;
    CHAR    CodePageName[260];
} CPINFOEXA, *LPCPINFOEXA;
typedef struct _cpinfoexW {
    UINT    MaxCharSize;
    BYTE    DefaultChar[2];
    BYTE    LeadByte[12];
    WCHAR   UnicodeDefaultChar;
    UINT    CodePage;
    WCHAR   CodePageName[260];
} CPINFOEXW, *LPCPINFOEXW;
typedef CPINFOEXA CPINFOEX;
typedef LPCPINFOEXA LPCPINFOEX;
typedef struct _numberfmtA {
    UINT    NumDigits;
    UINT    LeadingZero;
    UINT    Grouping;
    LPSTR   lpDecimalSep;
    LPSTR   lpThousandSep;
    UINT    NegativeOrder;
} NUMBERFMTA, *LPNUMBERFMTA;
typedef struct _numberfmtW {
    UINT    NumDigits;
    UINT    LeadingZero;
    UINT    Grouping;
    LPWSTR  lpDecimalSep;
    LPWSTR  lpThousandSep;
    UINT    NegativeOrder;
} NUMBERFMTW, *LPNUMBERFMTW;
typedef NUMBERFMTA NUMBERFMT;
typedef LPNUMBERFMTA LPNUMBERFMT;
typedef struct _currencyfmtA {
    UINT    NumDigits;
    UINT    LeadingZero;
    UINT    Grouping;
    LPSTR   lpDecimalSep;
    LPSTR   lpThousandSep;
    UINT    NegativeOrder;
    UINT    PositiveOrder;
    LPSTR   lpCurrencySymbol;
} CURRENCYFMTA, *LPCURRENCYFMTA;
typedef struct _currencyfmtW {
    UINT    NumDigits;
    UINT    LeadingZero;
    UINT    Grouping;
    LPWSTR  lpDecimalSep;
    LPWSTR  lpThousandSep;
    UINT    NegativeOrder;
    UINT    PositiveOrder;
    LPWSTR  lpCurrencySymbol;
} CURRENCYFMTW, *LPCURRENCYFMTW;
typedef CURRENCYFMTA CURRENCYFMT;
typedef LPCURRENCYFMTA LPCURRENCYFMT;
enum SYSNLS_FUNCTION{
    COMPARE_STRING    =  0x0001,
};
typedef DWORD NLS_FUNCTION;
typedef struct _nlsversioninfo{
    DWORD dwNLSVersionInfoSize;
    DWORD dwNLSVersion;
    DWORD dwDefinedVersion;
} NLSVERSIONINFO, *LPNLSVERSIONINFO;
typedef struct _nlsversioninfoex{
    DWORD dwNLSVersionInfoSize;
    DWORD dwNLSVersion;
    DWORD dwDefinedVersion;
    DWORD dwEffectiveId;
    GUID  guidCustomVersion;
} NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;
typedef LONG    GEOID;
typedef DWORD   GEOTYPE;
typedef DWORD   GEOCLASS;
enum SYSGEOTYPE {
    GEO_NATION      =       0x0001,
    GEO_LATITUDE    =       0x0002,
    GEO_LONGITUDE   =       0x0003,
    GEO_ISO2        =       0x0004,
    GEO_ISO3        =       0x0005,
    GEO_RFC1766     =       0x0006,
    GEO_LCID        =       0x0007,
    GEO_FRIENDLYNAME=       0x0008,
    GEO_OFFICIALNAME=       0x0009,
    GEO_TIMEZONES   =       0x000A,
    GEO_OFFICIALLANGUAGES = 0x000B,
};
enum SYSGEOCLASS {
    GEOCLASS_NATION  = 16,
    GEOCLASS_REGION  = 14,
};
typedef BOOL (* LANGUAGEGROUP_ENUMPROCA)(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR);
typedef BOOL (* LANGGROUPLOCALE_ENUMPROCA)(LGRPID, LCID, LPSTR, LONG_PTR);
typedef BOOL (* UILANGUAGE_ENUMPROCA)(LPSTR, LONG_PTR);
typedef BOOL (* LOCALE_ENUMPROCA)(LPSTR);
typedef BOOL (* CODEPAGE_ENUMPROCA)(LPSTR);
typedef BOOL (* DATEFMT_ENUMPROCA)(LPSTR);
typedef BOOL (* DATEFMT_ENUMPROCEXA)(LPSTR, CALID);
typedef BOOL (* TIMEFMT_ENUMPROCA)(LPSTR);
typedef BOOL (* CALINFO_ENUMPROCA)(LPSTR);
typedef BOOL (* CALINFO_ENUMPROCEXA)(LPSTR, CALID);
typedef BOOL (* LANGUAGEGROUP_ENUMPROCW)(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR);
typedef BOOL (* LANGGROUPLOCALE_ENUMPROCW)(LGRPID, LCID, LPWSTR, LONG_PTR);
typedef BOOL (* UILANGUAGE_ENUMPROCW)(LPWSTR, LONG_PTR);
typedef BOOL (* LOCALE_ENUMPROCW)(LPWSTR);
typedef BOOL (* CODEPAGE_ENUMPROCW)(LPWSTR);
typedef BOOL (* DATEFMT_ENUMPROCW)(LPWSTR);
typedef BOOL (* DATEFMT_ENUMPROCEXW)(LPWSTR, CALID);
typedef BOOL (* TIMEFMT_ENUMPROCW)(LPWSTR);
typedef BOOL (* CALINFO_ENUMPROCW)(LPWSTR);
typedef BOOL (* CALINFO_ENUMPROCEXW)(LPWSTR, CALID);
typedef BOOL (* GEO_ENUMPROC)(GEOID);
typedef struct _FILEMUIINFO {
    DWORD       dwSize;
    DWORD       dwVersion;
    DWORD       dwFileType;
    BYTE        pChecksum[16];
    BYTE        pServiceChecksum[16];
    DWORD       dwLanguageNameOffset;
    DWORD       dwTypeIDMainSize;
    DWORD       dwTypeIDMainOffset;
    DWORD       dwTypeNameMainOffset;
    DWORD       dwTypeIDMUISize;
    DWORD       dwTypeIDMUIOffset;
    DWORD       dwTypeNameMUIOffset;
    BYTE        abBuffer[8];
} FILEMUIINFO, *PFILEMUIINFO;

BOOL

IsValidCodePage(
     UINT  CodePage);

UINT

GetACP(void);

UINT

GetOEMCP(void);

BOOL

GetCPInfo(
     UINT       CodePage,
     LPCPINFO  lpCPInfo);

BOOL

GetCPInfoExA(
     UINT          CodePage,
     DWORD         dwFlags,
     LPCPINFOEXA  lpCPInfoEx);

BOOL

GetCPInfoExW(
     UINT          CodePage,
     DWORD         dwFlags,
     LPCPINFOEXW  lpCPInfoEx);

BOOL

IsDBCSLeadByte(
     BYTE  TestChar);

BOOL

IsDBCSLeadByteEx(
     UINT  CodePage,
     BYTE  TestChar);

int

MultiByteToWideChar(
     UINT     CodePage,
     DWORD    dwFlags,
     LPCSTR   lpMultiByteStr,
     int      cbMultiByte,
      LPWSTR  lpWideCharStr,
     int      cchWideChar);

int

WideCharToMultiByte(
     UINT     CodePage,
     DWORD    dwFlags,
     LPCWSTR  lpWideCharStr,
     int      cchWideChar,
      LPSTR   lpMultiByteStr,
     int      cbMultiByte,
     LPCSTR   lpDefaultChar,
     LPBOOL  lpUsedDefaultChar);

int

CompareStringA(
     LCID     Locale,
     DWORD    dwCmpFlags,
     LPCSTR  lpString1,
     int      cchCount1,
     LPCSTR  lpString2,
     int      cchCount2);

int

CompareStringW(
     LCID     Locale,
     DWORD    dwCmpFlags,
     LPCWSTR  lpString1,
     int      cchCount1,
     LPCWSTR  lpString2,
     int      cchCount2);

int

LCMapStringA(
     LCID     Locale,
     DWORD    dwMapFlags,
     LPCSTR  lpSrcStr,
     int      cchSrc,
     LPSTR  lpDestStr,
     int      cchDest);

int

LCMapStringW(
     LCID     Locale,
     DWORD    dwMapFlags,
     LPCWSTR  lpSrcStr,
     int      cchSrc,
     LPWSTR  lpDestStr,
     int      cchDest);

int

GetLocaleInfoA(
     LCID     Locale,
     LCTYPE   LCType,
     LPSTR  lpLCData,
     int      cchData);

int

GetLocaleInfoW(
     LCID     Locale,
     LCTYPE   LCType,
     LPWSTR  lpLCData,
     int      cchData);

BOOL

SetLocaleInfoA(
     LCID     Locale,
     LCTYPE   LCType,
     LPCSTR  lpLCData);

BOOL

SetLocaleInfoW(
     LCID     Locale,
     LCTYPE   LCType,
     LPCWSTR  lpLCData);

int

GetCalendarInfoA(
     LCID     Locale,
     CALID    Calendar,
     CALTYPE  CalType,
     LPSTR   lpCalData,
     int      cchData,
     LPDWORD  lpValue);

int

GetCalendarInfoW(
     LCID     Locale,
     CALID    Calendar,
     CALTYPE  CalType,
     LPWSTR   lpCalData,
     int      cchData,
     LPDWORD  lpValue);

BOOL

SetCalendarInfoA(
     LCID     Locale,
     CALID    Calendar,
     CALTYPE  CalType,
     LPCSTR  lpCalData);

BOOL

SetCalendarInfoW(
     LCID     Locale,
     CALID    Calendar,
     CALTYPE  CalType,
     LPCWSTR  lpCalData);

int

GetTimeFormatA(
     LCID             Locale,
     DWORD            dwFlags,
     const SYSTEMTIME *lpTime,
     LPCSTR          lpFormat,
     LPSTR          lpTimeStr,
     int              cchTime);

int

GetTimeFormatW(
     LCID             Locale,
     DWORD            dwFlags,
     const SYSTEMTIME *lpTime,
     LPCWSTR          lpFormat,
     LPWSTR          lpTimeStr,
     int              cchTime);

int

GetDateFormatA(
     LCID             Locale,
     DWORD            dwFlags,
     const SYSTEMTIME *lpDate,
     LPCSTR          lpFormat,
     LPSTR          lpDateStr,
     int              cchDate);

int

GetDateFormatW(
     LCID             Locale,
     DWORD            dwFlags,
     const SYSTEMTIME *lpDate,
     LPCWSTR          lpFormat,
     LPWSTR          lpDateStr,
     int              cchDate);

int

GetNumberFormatA(
     LCID             Locale,
     DWORD            dwFlags,
     LPCSTR          lpValue,
     const NUMBERFMTA *lpFormat,
     LPSTR          lpNumberStr,
     int              cchNumber);

int

GetNumberFormatW(
     LCID             Locale,
     DWORD            dwFlags,
     LPCWSTR          lpValue,
     const NUMBERFMTW *lpFormat,
     LPWSTR          lpNumberStr,
     int              cchNumber);

int

GetCurrencyFormatA(
     LCID               Locale,
     DWORD              dwFlags,
     LPCSTR            lpValue,
     const CURRENCYFMTA *lpFormat,
     LPSTR            lpCurrencyStr,
     int                cchCurrency);

int

GetCurrencyFormatW(
     LCID               Locale,
     DWORD              dwFlags,
     LPCWSTR            lpValue,
     const CURRENCYFMTW *lpFormat,
     LPWSTR            lpCurrencyStr,
     int                cchCurrency);

BOOL

EnumCalendarInfoA(
     CALINFO_ENUMPROCA lpCalInfoEnumProc,
     LCID              Locale,
     CALID             Calendar,
     CALTYPE           CalType);

BOOL

EnumCalendarInfoW(
     CALINFO_ENUMPROCW lpCalInfoEnumProc,
     LCID              Locale,
     CALID             Calendar,
     CALTYPE           CalType);

BOOL

EnumCalendarInfoExA(
     CALINFO_ENUMPROCEXA lpCalInfoEnumProcEx,
     LCID                Locale,
     CALID               Calendar,
     CALTYPE             CalType);

BOOL

EnumCalendarInfoExW(
     CALINFO_ENUMPROCEXW lpCalInfoEnumProcEx,
     LCID                Locale,
     CALID               Calendar,
     CALTYPE             CalType);

BOOL

EnumTimeFormatsA(
     TIMEFMT_ENUMPROCA lpTimeFmtEnumProc,
     LCID              Locale,
     DWORD             dwFlags);

BOOL

EnumTimeFormatsW(
     TIMEFMT_ENUMPROCW lpTimeFmtEnumProc,
     LCID              Locale,
     DWORD             dwFlags);

BOOL

EnumDateFormatsA(
     DATEFMT_ENUMPROCA lpDateFmtEnumProc,
     LCID              Locale,
     DWORD             dwFlags);

BOOL

EnumDateFormatsW(
     DATEFMT_ENUMPROCW lpDateFmtEnumProc,
     LCID              Locale,
     DWORD             dwFlags);

BOOL

EnumDateFormatsExA(
     DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx,
     LCID                Locale,
     DWORD               dwFlags);

BOOL

EnumDateFormatsExW(
     DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx,
     LCID                Locale,
     DWORD               dwFlags);

BOOL

IsValidLanguageGroup(
     LGRPID  LanguageGroup,
     DWORD   dwFlags);

BOOL

GetNLSVersion(
        NLS_FUNCTION     Function,
        LCID             Locale,
     LPNLSVERSIONINFO lpVersionInformation);

BOOL

IsNLSDefinedString(
     NLS_FUNCTION     Function,
     DWORD            dwFlags,
     LPNLSVERSIONINFO lpVersionInformation,
     LPCWSTR          lpString,
     INT              cchStr);

BOOL

IsValidLocale(
     LCID   Locale,
     DWORD  dwFlags);

int

GetGeoInfoA(
     GEOID       Location,
     GEOTYPE     GeoType,
     LPSTR     lpGeoData,
     int         cchData,
     LANGID      LangId);

int

GetGeoInfoW(
     GEOID       Location,
     GEOTYPE     GeoType,
     LPWSTR     lpGeoData,
     int         cchData,
     LANGID      LangId);

BOOL

EnumSystemGeoID(
     GEOCLASS        GeoClass,
     GEOID           ParentGeoId,
     GEO_ENUMPROC    lpGeoEnumProc);

GEOID

GetUserGeoID(
     GEOCLASS    GeoClass);

BOOL

SetUserGeoID(
     GEOID       GeoId);

LCID

ConvertDefaultLocale(
     LCID   Locale);

LCID

GetThreadLocale(void);

BOOL

SetThreadLocale(
     LCID  Locale
    );

LANGID

GetSystemDefaultUILanguage(void);

LANGID

GetUserDefaultUILanguage(void);

LANGID

GetSystemDefaultLangID(void);

LANGID

GetUserDefaultLangID(void);

LCID

GetSystemDefaultLCID(void);

LCID

GetUserDefaultLCID(void);

LANGID

SetThreadUILanguage( LANGID LangId);

BOOL

GetStringTypeExA(
                     LCID       Locale,
                     DWORD      dwInfoType,
      LPCSTR   lpSrcStr,
                     int        cchSrc,
     LPWORD     lpCharType);

BOOL

GetStringTypeExW(
                     LCID       Locale,
                     DWORD      dwInfoType,
      LPCWSTR   lpSrcStr,
                     int        cchSrc,
     LPWORD     lpCharType);

BOOL

GetStringTypeA(
     LCID     Locale,
     DWORD    dwInfoType,
     LPCSTR   lpSrcStr,
     int      cchSrc,
     LPWORD  lpCharType);

BOOL

GetStringTypeW(
     DWORD    dwInfoType,
      LPCWSTR  lpSrcStr,
     int      cchSrc,
     LPWORD  lpCharType);

int

FoldStringA(
     DWORD    dwMapFlags,
     LPCSTR  lpSrcStr,
     int      cchSrc,
     LPSTR  lpDestStr,
     int      cchDest);

int

FoldStringW(
     DWORD    dwMapFlags,
     LPCWSTR  lpSrcStr,
     int      cchSrc,
     LPWSTR  lpDestStr,
     int      cchDest);

BOOL

EnumSystemLanguageGroupsA(
     LANGUAGEGROUP_ENUMPROCA lpLanguageGroupEnumProc,
     DWORD                   dwFlags,
     LONG_PTR                lParam);

BOOL

EnumSystemLanguageGroupsW(
     LANGUAGEGROUP_ENUMPROCW lpLanguageGroupEnumProc,
     DWORD                   dwFlags,
     LONG_PTR                lParam);

BOOL

EnumLanguageGroupLocalesA(
     LANGGROUPLOCALE_ENUMPROCA lpLangGroupLocaleEnumProc,
     LGRPID                    LanguageGroup,
     DWORD                     dwFlags,
     LONG_PTR                  lParam);

BOOL

EnumLanguageGroupLocalesW(
     LANGGROUPLOCALE_ENUMPROCW lpLangGroupLocaleEnumProc,
     LGRPID                    LanguageGroup,
     DWORD                     dwFlags,
     LONG_PTR                  lParam);

BOOL

EnumUILanguagesA(
     UILANGUAGE_ENUMPROCA lpUILanguageEnumProc,
     DWORD                dwFlags,
     LONG_PTR             lParam);

BOOL

EnumUILanguagesW(
     UILANGUAGE_ENUMPROCW lpUILanguageEnumProc,
     DWORD                dwFlags,
     LONG_PTR             lParam);

BOOL

EnumSystemLocalesA(
     LOCALE_ENUMPROCA lpLocaleEnumProc,
     DWORD            dwFlags);

BOOL

EnumSystemLocalesW(
     LOCALE_ENUMPROCW lpLocaleEnumProc,
     DWORD            dwFlags);

BOOL

EnumSystemCodePagesA(
     CODEPAGE_ENUMPROCA lpCodePageEnumProc,
     DWORD              dwFlags);

BOOL

EnumSystemCodePagesW(
     CODEPAGE_ENUMPROCW lpCodePageEnumProc,
     DWORD              dwFlags);
typedef struct _COORD {
    SHORT X;
    SHORT Y;
} COORD, *PCOORD;
typedef struct _SMALL_RECT {
    SHORT Left;
    SHORT Top;
    SHORT Right;
    SHORT Bottom;
} SMALL_RECT, *PSMALL_RECT;
typedef struct _KEY_EVENT_RECORD {
    BOOL bKeyDown;
    WORD wRepeatCount;
    WORD wVirtualKeyCode;
    WORD wVirtualScanCode;
    union {
        WCHAR UnicodeChar;
        CHAR   AsciiChar;
    } uChar;
    DWORD dwControlKeyState;
} KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
typedef struct _MOUSE_EVENT_RECORD {
    COORD dwMousePosition;
    DWORD dwButtonState;
    DWORD dwControlKeyState;
    DWORD dwEventFlags;
} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
typedef struct _WINDOW_BUFFER_SIZE_RECORD {
    COORD dwSize;
} WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD;
typedef struct _MENU_EVENT_RECORD {
    UINT dwCommandId;
} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
typedef struct _FOCUS_EVENT_RECORD {
    BOOL bSetFocus;
} FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD;
typedef struct _INPUT_RECORD {
    WORD EventType;
    union {
        KEY_EVENT_RECORD KeyEvent;
        MOUSE_EVENT_RECORD MouseEvent;
        WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
        MENU_EVENT_RECORD MenuEvent;
        FOCUS_EVENT_RECORD FocusEvent;
    } Event;
} INPUT_RECORD, *PINPUT_RECORD;
typedef struct _CHAR_INFO {
    union {
        WCHAR UnicodeChar;
        CHAR   AsciiChar;
    } Char;
    WORD Attributes;
} CHAR_INFO, *PCHAR_INFO;
typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
    COORD dwSize;
    COORD dwCursorPosition;
    WORD  wAttributes;
    SMALL_RECT srWindow;
    COORD dwMaximumWindowSize;
} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX {
    ULONG cbSize;
    COORD dwSize;
    COORD dwCursorPosition;
    WORD wAttributes;
    SMALL_RECT srWindow;
    COORD dwMaximumWindowSize;
    WORD wPopupAttributes;
    BOOL bFullscreenSupported;
    COLORREF ColorTable[16];
} CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;
typedef struct _CONSOLE_CURSOR_INFO {
    DWORD  dwSize;
    BOOL   bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
typedef struct _CONSOLE_FONT_INFO {
    DWORD  nFont;
    COORD  dwFontSize;
} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
typedef struct _CONSOLE_FONT_INFOEX {
    ULONG cbSize;
    DWORD nFont;
    COORD dwFontSize;
    UINT FontFamily;
    UINT FontWeight;
    WCHAR FaceName[32];
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
typedef struct _CONSOLE_HISTORY_INFO {
    UINT cbSize;
    UINT HistoryBufferSize;
    UINT NumberOfHistoryBuffers;
    DWORD dwFlags;
} CONSOLE_HISTORY_INFO, *PCONSOLE_HISTORY_INFO;
typedef struct _CONSOLE_SELECTION_INFO {
    DWORD dwFlags;
    COORD dwSelectionAnchor;
    SMALL_RECT srSelection;
} CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
typedef
BOOL
( *PHANDLER_ROUTINE)(
    DWORD CtrlType
    );

BOOL

PeekConsoleInputA(
     HANDLE hConsoleInput,
     PINPUT_RECORD lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsRead
    );

BOOL

PeekConsoleInputW(
     HANDLE hConsoleInput,
     PINPUT_RECORD lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsRead
    );

BOOL

ReadConsoleInputA(
     HANDLE hConsoleInput,
     PINPUT_RECORD lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsRead
    );

BOOL

ReadConsoleInputW(
     HANDLE hConsoleInput,
     PINPUT_RECORD lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsRead
    );

BOOL

WriteConsoleInputA(
     HANDLE hConsoleInput,
     const INPUT_RECORD *lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsWritten
    );

BOOL

WriteConsoleInputW(
     HANDLE hConsoleInput,
     const INPUT_RECORD *lpBuffer,
     DWORD nLength,
     LPDWORD lpNumberOfEventsWritten
    );

BOOL

ReadConsoleOutputA(
     HANDLE hConsoleOutput,
     PCHAR_INFO lpBuffer,
     COORD dwBufferSize,
     COORD dwBufferCoord,
     PSMALL_RECT lpReadRegion
    );

BOOL

ReadConsoleOutputW(
     HANDLE hConsoleOutput,
     PCHAR_INFO lpBuffer,
     COORD dwBufferSize,
     COORD dwBufferCoord,
     PSMALL_RECT lpReadRegion
    );

BOOL

WriteConsoleOutputA(
     HANDLE hConsoleOutput,
     const CHAR_INFO *lpBuffer,
     COORD dwBufferSize,
     COORD dwBufferCoord,
     PSMALL_RECT lpWriteRegion
    );

BOOL

WriteConsoleOutputW(
     HANDLE hConsoleOutput,
     const CHAR_INFO *lpBuffer,
     COORD dwBufferSize,
     COORD dwBufferCoord,
     PSMALL_RECT lpWriteRegion
    );

BOOL

ReadConsoleOutputCharacterA(
     HANDLE hConsoleOutput,
     LPSTR lpCharacter,
     DWORD nLength,
     COORD dwReadCoord,
     LPDWORD lpNumberOfCharsRead
    );

BOOL

ReadConsoleOutputCharacterW(
     HANDLE hConsoleOutput,
     LPWSTR lpCharacter,
     DWORD nLength,
     COORD dwReadCoord,
     LPDWORD lpNumberOfCharsRead
    );

BOOL

ReadConsoleOutputAttribute(
     HANDLE hConsoleOutput,
     LPWORD lpAttribute,
     DWORD nLength,
     COORD dwReadCoord,
     LPDWORD lpNumberOfAttrsRead
    );

BOOL

WriteConsoleOutputCharacterA(
     HANDLE hConsoleOutput,
     LPCSTR lpCharacter,
     DWORD nLength,
     COORD dwWriteCoord,
     LPDWORD lpNumberOfCharsWritten
    );

BOOL

WriteConsoleOutputCharacterW(
     HANDLE hConsoleOutput,
     LPCWSTR lpCharacter,
     DWORD nLength,
     COORD dwWriteCoord,
     LPDWORD lpNumberOfCharsWritten
    );

BOOL

WriteConsoleOutputAttribute(
     HANDLE hConsoleOutput,
     const WORD *lpAttribute,
     DWORD nLength,
     COORD dwWriteCoord,
     LPDWORD lpNumberOfAttrsWritten
    );

BOOL

FillConsoleOutputCharacterA(
     HANDLE hConsoleOutput,
     CHAR  cCharacter,
     DWORD  nLength,
     COORD  dwWriteCoord,
     LPDWORD lpNumberOfCharsWritten
    );

BOOL

FillConsoleOutputCharacterW(
     HANDLE hConsoleOutput,
     WCHAR  cCharacter,
     DWORD  nLength,
     COORD  dwWriteCoord,
     LPDWORD lpNumberOfCharsWritten
    );

BOOL

FillConsoleOutputAttribute(
     HANDLE hConsoleOutput,
     WORD   wAttribute,
     DWORD  nLength,
     COORD  dwWriteCoord,
     LPDWORD lpNumberOfAttrsWritten
    );

BOOL

GetConsoleMode(
     HANDLE hConsoleHandle,
     LPDWORD lpMode
    );

BOOL

GetNumberOfConsoleInputEvents(
     HANDLE hConsoleInput,
     LPDWORD lpNumberOfEvents
    );

BOOL

GetConsoleScreenBufferInfo(
     HANDLE hConsoleOutput,
     PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
    );

BOOL

GetConsoleScreenBufferInfoEx(
     HANDLE hConsoleOutput,
     PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx);

BOOL

SetConsoleScreenBufferInfoEx(
     HANDLE hConsoleOutput,
     PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx);

COORD

GetLargestConsoleWindowSize(
     HANDLE hConsoleOutput
    );

BOOL

GetConsoleCursorInfo(
     HANDLE hConsoleOutput,
     PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
    );

BOOL

GetCurrentConsoleFont(
     HANDLE hConsoleOutput,
     BOOL bMaximumWindow,
     PCONSOLE_FONT_INFO lpConsoleCurrentFont
    );

BOOL

GetCurrentConsoleFontEx(
     HANDLE hConsoleOutput,
     BOOL bMaximumWindow,
     PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);

BOOL

SetCurrentConsoleFontEx(
     HANDLE hConsoleOutput,
     BOOL bMaximumWindow,
     PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);

BOOL

GetConsoleHistoryInfo(
     PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo);

BOOL

SetConsoleHistoryInfo(
     PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo);

COORD

GetConsoleFontSize(
     HANDLE hConsoleOutput,
     DWORD nFont
    );

BOOL

GetConsoleSelectionInfo(
     PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo
    );

BOOL

GetNumberOfConsoleMouseButtons(
     LPDWORD lpNumberOfMouseButtons
    );

BOOL

SetConsoleMode(
     HANDLE hConsoleHandle,
     DWORD dwMode
    );

BOOL

SetConsoleActiveScreenBuffer(
     HANDLE hConsoleOutput
    );

BOOL

FlushConsoleInputBuffer(
     HANDLE hConsoleInput
    );

BOOL

SetConsoleScreenBufferSize(
     HANDLE hConsoleOutput,
     COORD dwSize
    );

BOOL

SetConsoleCursorPosition(
     HANDLE hConsoleOutput,
     COORD dwCursorPosition
    );

BOOL

SetConsoleCursorInfo(
     HANDLE hConsoleOutput,
     const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
    );

BOOL

ScrollConsoleScreenBufferA(
     HANDLE hConsoleOutput,
     const SMALL_RECT *lpScrollRectangle,
     const SMALL_RECT *lpClipRectangle,
     COORD dwDestinationOrigin,
     const CHAR_INFO *lpFill
    );

BOOL

ScrollConsoleScreenBufferW(
     HANDLE hConsoleOutput,
     const SMALL_RECT *lpScrollRectangle,
     const SMALL_RECT *lpClipRectangle,
     COORD dwDestinationOrigin,
     const CHAR_INFO *lpFill
    );

BOOL

SetConsoleWindowInfo(
     HANDLE hConsoleOutput,
     BOOL bAbsolute,
     const SMALL_RECT *lpConsoleWindow
    );

BOOL

SetConsoleTextAttribute(
     HANDLE hConsoleOutput,
     WORD wAttributes
    );

BOOL

SetConsoleCtrlHandler(
     PHANDLER_ROUTINE HandlerRoutine,
     BOOL Add);

BOOL

GenerateConsoleCtrlEvent(
     DWORD dwCtrlEvent,
     DWORD dwProcessGroupId
    );

BOOL

AllocConsole( void );

BOOL

FreeConsole( void );

BOOL

AttachConsole(
     DWORD dwProcessId
    );

DWORD

GetConsoleTitleA(
     LPSTR lpConsoleTitle,
     DWORD nSize
    );

DWORD

GetConsoleTitleW(
     LPWSTR lpConsoleTitle,
     DWORD nSize
    );

DWORD

GetConsoleOriginalTitleA(
     LPSTR lpConsoleTitle,
     DWORD nSize);

DWORD

GetConsoleOriginalTitleW(
     LPWSTR lpConsoleTitle,
     DWORD nSize);

BOOL

SetConsoleTitleA(
     LPCSTR lpConsoleTitle
    );

BOOL

SetConsoleTitleW(
     LPCWSTR lpConsoleTitle
    );
typedef struct _CONSOLE_READCONSOLE_CONTROL {
     ULONG nLength;
     ULONG nInitialChars;
     ULONG dwCtrlWakeupMask;
     ULONG dwControlKeyState;
} CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;

BOOL

ReadConsoleA(
     HANDLE hConsoleInput,
       LPVOID lpBuffer,
     DWORD nNumberOfCharsToRead,
     LPDWORD lpNumberOfCharsRead,
     PCONSOLE_READCONSOLE_CONTROL pInputControl
    );

BOOL

ReadConsoleW(
     HANDLE hConsoleInput,
       LPVOID lpBuffer,
     DWORD nNumberOfCharsToRead,
     LPDWORD lpNumberOfCharsRead,
     PCONSOLE_READCONSOLE_CONTROL pInputControl
    );

BOOL

WriteConsoleA(
     HANDLE hConsoleOutput,
     const void *lpBuffer,
     DWORD nNumberOfCharsToWrite,
     LPDWORD lpNumberOfCharsWritten,
     LPVOID lpReserved
    );

BOOL

WriteConsoleW(
     HANDLE hConsoleOutput,
     const void *lpBuffer,
     DWORD nNumberOfCharsToWrite,
     LPDWORD lpNumberOfCharsWritten,
     LPVOID lpReserved
    );

HANDLE

CreateConsoleScreenBuffer(
     DWORD dwDesiredAccess,
     DWORD dwShareMode,
     const SECURITY_ATTRIBUTES *lpSecurityAttributes,
     DWORD dwFlags,
     LPVOID lpScreenBufferData
    );

UINT

GetConsoleCP( void );

BOOL

SetConsoleCP(
     UINT wCodePageID
    );

UINT

GetConsoleOutputCP( void );

BOOL

SetConsoleOutputCP(
     UINT wCodePageID
    );

BOOL

GetConsoleDisplayMode(
     LPDWORD lpModeFlags);
BOOL

SetConsoleDisplayMode(
     HANDLE hConsoleOutput,
     DWORD dwFlags,
     PCOORD lpNewScreenBufferDimensions);

HWND

GetConsoleWindow(
    void
    );

DWORD

GetConsoleProcessList(
     LPDWORD lpdwProcessList,
     DWORD dwProcessCount);

BOOL

AddConsoleAliasA(
     LPSTR Source,
     LPSTR Target,
     LPSTR ExeName);

BOOL

AddConsoleAliasW(
     LPWSTR Source,
     LPWSTR Target,
     LPWSTR ExeName);

DWORD

GetConsoleAliasA(
     LPSTR Source,
     LPSTR TargetBuffer,
     DWORD TargetBufferLength,
     LPSTR ExeName);

DWORD

GetConsoleAliasW(
     LPWSTR Source,
     LPWSTR TargetBuffer,
     DWORD TargetBufferLength,
     LPWSTR ExeName);

DWORD

GetConsoleAliasesLengthA(
     LPSTR ExeName);

DWORD

GetConsoleAliasesLengthW(
     LPWSTR ExeName);

DWORD

GetConsoleAliasExesLengthA(
    void);

DWORD

GetConsoleAliasExesLengthW(
    void);

DWORD

GetConsoleAliasesA(
     LPSTR AliasBuffer,
     DWORD AliasBufferLength,
     LPSTR ExeName);

DWORD

GetConsoleAliasesW(
     LPWSTR AliasBuffer,
     DWORD AliasBufferLength,
     LPWSTR ExeName);

DWORD

GetConsoleAliasExesA(
     LPSTR ExeNameBuffer,
     DWORD ExeNameBufferLength);

DWORD

GetConsoleAliasExesW(
     LPWSTR ExeNameBuffer,
     DWORD ExeNameBufferLength);
typedef struct tagVS_FIXEDFILEINFO
{
    DWORD   dwSignature;
    DWORD   dwStrucVersion;
    DWORD   dwFileVersionMS;
    DWORD   dwFileVersionLS;
    DWORD   dwProductVersionMS;
    DWORD   dwProductVersionLS;
    DWORD   dwFileFlagsMask;
    DWORD   dwFileFlags;
    DWORD   dwFileOS;
    DWORD   dwFileType;
    DWORD   dwFileSubtype;
    DWORD   dwFileDateMS;
    DWORD   dwFileDateLS;
} VS_FIXEDFILEINFO;
DWORD

VerFindFileA(
                                 DWORD uFlags,
                                 LPCSTR szFileName,
                             LPCSTR szWinDir,
                                 LPCSTR szAppDir,
          LPSTR szCurDir,
                              PUINT lpuCurDirLen,
         LPSTR szDestDir,
                              PUINT lpuDestDirLen
        );
DWORD

VerFindFileW(
                                 DWORD uFlags,
                                 LPCWSTR szFileName,
                             LPCWSTR szWinDir,
                                 LPCWSTR szAppDir,
          LPWSTR szCurDir,
                              PUINT lpuCurDirLen,
         LPWSTR szDestDir,
                              PUINT lpuDestDirLen
        );
DWORD

VerInstallFileA(
                                 DWORD uFlags,
                                 LPCSTR szSrcFileName,
                                 LPCSTR szDestFileName,
                                 LPCSTR szSrcDir,
                                 LPCSTR szDestDir,
                                 LPCSTR szCurDir,
         LPSTR szTmpFile,
                              PUINT lpuTmpFileLen
        );
DWORD

VerInstallFileW(
                                 DWORD uFlags,
                                 LPCWSTR szSrcFileName,
                                 LPCWSTR szDestFileName,
                                 LPCWSTR szSrcDir,
                                 LPCWSTR szDestDir,
                                 LPCWSTR szCurDir,
         LPWSTR szTmpFile,
                              PUINT lpuTmpFileLen
        );
DWORD

GetFileVersionInfoSizeA(
                LPCSTR lptstrFilename,
         LPDWORD lpdwHandle
        );
DWORD

GetFileVersionInfoSizeW(
                LPCWSTR lptstrFilename,
         LPDWORD lpdwHandle
        );
BOOL

GetFileVersionInfoA(
                        LPCSTR lptstrFilename,
                  DWORD dwHandle,
                        DWORD dwLen,
         LPVOID lpData
        );
BOOL

GetFileVersionInfoW(
                        LPCWSTR lptstrFilename,
                  DWORD dwHandle,
                        DWORD dwLen,
         LPVOID lpData
        );
DWORD  GetFileVersionInfoSizeExA( DWORD dwFlags,  LPCSTR lpwstrFilename,  LPDWORD lpdwHandle);
DWORD  GetFileVersionInfoSizeExW( DWORD dwFlags,  LPCWSTR lpwstrFilename,  LPDWORD lpdwHandle);
BOOL  GetFileVersionInfoExA( DWORD dwFlags,
                                     LPCSTR lpwstrFilename,
                                     DWORD dwHandle,
                                     DWORD dwLen,
                                     LPVOID lpData);
BOOL  GetFileVersionInfoExW( DWORD dwFlags,
                                     LPCWSTR lpwstrFilename,
                                     DWORD dwHandle,
                                     DWORD dwLen,
                                     LPVOID lpData);
DWORD

VerLanguageNameA(
                          DWORD wLang,
         LPSTR szLang,
                          DWORD cchLang
        );
DWORD

VerLanguageNameW(
                          DWORD wLang,
         LPWSTR szLang,
                          DWORD cchLang
        );
BOOL

VerQueryValueA(
         LPCVOID pBlock,
         LPCSTR lpSubBlock,
         LPVOID * lplpBuffer,
         PUINT puLen
        );
BOOL

VerQueryValueW(
         LPCVOID pBlock,
         LPCWSTR lpSubBlock,
         LPVOID * lplpBuffer,
         PUINT puLen
        );
typedef ACCESS_MASK REGSAM;
struct val_context {
    int valuelen;
    LPVOID value_context;
    LPVOID val_buff_ptr;
};
typedef struct val_context  *PVALCONTEXT;
typedef struct pvalueA {
    LPSTR   pv_valuename;
    int pv_valuelen;
    LPVOID pv_value_context;
    DWORD pv_type;
}PVALUEA,  *PPVALUEA;
typedef struct pvalueW {
    LPWSTR  pv_valuename;
    int pv_valuelen;
    LPVOID pv_value_context;
    DWORD pv_type;
}PVALUEW,  *PPVALUEW;
typedef PVALUEA PVALUE;
typedef PPVALUEA PPVALUE;
typedef
DWORD __cdecl
QUERYHANDLER (LPVOID keycontext, PVALCONTEXT val_list, DWORD num_vals,
          LPVOID outputbuffer, DWORD  *total_outlen, DWORD input_blen);
typedef QUERYHANDLER  *PQUERYHANDLER;
typedef struct provider_info {
    PQUERYHANDLER pi_R0_1val;
    PQUERYHANDLER pi_R0_allvals;
    PQUERYHANDLER pi_R3_1val;
    PQUERYHANDLER pi_R3_allvals;
    DWORD pi_flags;
    LPVOID pi_key_context;
}REG_PROVIDER;
typedef struct provider_info  *PPROVIDER;
typedef struct value_entA {
    LPSTR   ve_valuename;
    DWORD ve_valuelen;
    DWORD_PTR ve_valueptr;
    DWORD ve_type;
}VALENTA,  *PVALENTA;
typedef struct value_entW {
    LPWSTR  ve_valuename;
    DWORD ve_valuelen;
    DWORD_PTR ve_valueptr;
    DWORD ve_type;
}VALENTW,  *PVALENTW;
typedef VALENTA VALENT;
typedef PVALENTA PVALENT;
typedef  LONG LSTATUS;

LSTATUS

RegCloseKey (
     HKEY hKey
    );

LSTATUS

RegOverridePredefKey (
     HKEY hKey,
     HKEY hNewHKey
    );

LSTATUS

RegOpenUserClassesRoot(
     HANDLE hToken,
     DWORD dwOptions,
     REGSAM samDesired,
     PHKEY  phkResult
    );

LSTATUS

RegOpenCurrentUser(
     REGSAM samDesired,
     PHKEY phkResult
    );

LSTATUS

RegDisablePredefinedCache(
    void
    );

LSTATUS

RegDisablePredefinedCacheEx(
    void
    );

LSTATUS

RegConnectRegistryA (
     LPCSTR lpMachineName,
     HKEY hKey,
     PHKEY phkResult
    );

LSTATUS

RegConnectRegistryW (
     LPCWSTR lpMachineName,
     HKEY hKey,
     PHKEY phkResult
    );

LSTATUS

RegConnectRegistryExA (
     LPCSTR lpMachineName,
     HKEY hKey,
     ULONG Flags,
     PHKEY phkResult
    );

LSTATUS

RegConnectRegistryExW (
     LPCWSTR lpMachineName,
     HKEY hKey,
     ULONG Flags,
     PHKEY phkResult
    );

LSTATUS

RegCreateKeyA (
     HKEY hKey,
     LPCSTR lpSubKey,
     PHKEY phkResult
    );

LSTATUS

RegCreateKeyW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     PHKEY phkResult
    );

LSTATUS

RegCreateKeyExA (
     HKEY hKey,
     LPCSTR lpSubKey,
     DWORD Reserved,
     LPSTR lpClass,
     DWORD dwOptions,
     REGSAM samDesired,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     PHKEY phkResult,
     LPDWORD lpdwDisposition
    );

LSTATUS

RegCreateKeyExW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     DWORD Reserved,
     LPWSTR lpClass,
     DWORD dwOptions,
     REGSAM samDesired,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     PHKEY phkResult,
     LPDWORD lpdwDisposition
    );

LSTATUS

RegCreateKeyTransactedA (
     HKEY hKey,
     LPCSTR lpSubKey,
     DWORD Reserved,
     LPSTR lpClass,
     DWORD dwOptions,
     REGSAM samDesired,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     PHKEY phkResult,
     LPDWORD lpdwDisposition,
            HANDLE hTransaction,
     PVOID  pExtendedParemeter
    );

LSTATUS

RegCreateKeyTransactedW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     DWORD Reserved,
     LPWSTR lpClass,
     DWORD dwOptions,
     REGSAM samDesired,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     PHKEY phkResult,
     LPDWORD lpdwDisposition,
            HANDLE hTransaction,
     PVOID  pExtendedParemeter
    );

LSTATUS

RegDeleteKeyA (
     HKEY hKey,
     LPCSTR lpSubKey
    );

LSTATUS

RegDeleteKeyW (
     HKEY hKey,
     LPCWSTR lpSubKey
    );

LSTATUS

RegDeleteKeyExA (
     HKEY hKey,
     LPCSTR lpSubKey,
     REGSAM samDesired,
     DWORD Reserved
    );

LSTATUS

RegDeleteKeyExW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     REGSAM samDesired,
     DWORD Reserved
    );

LSTATUS

RegDeleteKeyTransactedA (
     HKEY hKey,
     LPCSTR lpSubKey,
     REGSAM samDesired,
     DWORD Reserved,
            HANDLE hTransaction,
     PVOID  pExtendedParameter
    );

LSTATUS

RegDeleteKeyTransactedW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     REGSAM samDesired,
     DWORD Reserved,
            HANDLE hTransaction,
     PVOID  pExtendedParameter
    );

LONG

RegDisableReflectionKey (
     HKEY hBase
    );

LONG

RegEnableReflectionKey (
     HKEY hBase
    );

LONG

RegQueryReflectionKey (
     HKEY hBase,
     BOOL *bIsReflectionDisabled
    );

LSTATUS

RegDeleteValueA (
     HKEY hKey,
     LPCSTR lpValueName
    );

LSTATUS

RegDeleteValueW (
     HKEY hKey,
     LPCWSTR lpValueName
    );

LSTATUS

RegEnumKeyA (
     HKEY hKey,
     DWORD dwIndex,
     LPSTR lpName,
     DWORD cchName
    );

LSTATUS

RegEnumKeyW (
     HKEY hKey,
     DWORD dwIndex,
     LPWSTR lpName,
     DWORD cchName
    );

LSTATUS

RegEnumKeyExA (
     HKEY hKey,
     DWORD dwIndex,
     LPSTR lpName,
     LPDWORD lpcchName,
     LPDWORD lpReserved,
     LPSTR lpClass,
     LPDWORD lpcchClass,
     PFILETIME lpftLastWriteTime
    );

LSTATUS

RegEnumKeyExW (
     HKEY hKey,
     DWORD dwIndex,
     LPWSTR lpName,
     LPDWORD lpcchName,
     LPDWORD lpReserved,
     LPWSTR lpClass,
     LPDWORD lpcchClass,
     PFILETIME lpftLastWriteTime
    );

LSTATUS

RegEnumValueA (
     HKEY hKey,
     DWORD dwIndex,
     LPSTR lpValueName,
     LPDWORD lpcchValueName,
     LPDWORD lpReserved,
     LPDWORD lpType,
      LPBYTE lpData,
     LPDWORD lpcbData
    );

LSTATUS

RegEnumValueW (
     HKEY hKey,
     DWORD dwIndex,
     LPWSTR lpValueName,
     LPDWORD lpcchValueName,
     LPDWORD lpReserved,
     LPDWORD lpType,
      LPBYTE lpData,
     LPDWORD lpcbData
    );

LSTATUS

RegFlushKey (
     HKEY hKey
    );

LSTATUS

RegGetKeySecurity (
     HKEY hKey,
     SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor,
     LPDWORD lpcbSecurityDescriptor
    );

LSTATUS

RegLoadKeyA (
     HKEY    hKey,
     LPCSTR  lpSubKey,
     LPCSTR  lpFile
    );

LSTATUS

RegLoadKeyW (
     HKEY    hKey,
     LPCWSTR  lpSubKey,
     LPCWSTR  lpFile
    );

LSTATUS

RegNotifyChangeKeyValue (
     HKEY hKey,
     BOOL bWatchSubtree,
     DWORD dwNotifyFilter,
     HANDLE hEvent,
     BOOL fAsynchronous
    );

LSTATUS

RegOpenKeyA (
     HKEY hKey,
     LPCSTR lpSubKey,
     PHKEY phkResult
    );

LSTATUS

RegOpenKeyW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     PHKEY phkResult
    );

LSTATUS

RegOpenKeyExA (
     HKEY hKey,
     LPCSTR lpSubKey,
     DWORD ulOptions,
     REGSAM samDesired,
     PHKEY phkResult
    );

LSTATUS

RegOpenKeyExW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     DWORD ulOptions,
     REGSAM samDesired,
     PHKEY phkResult
    );

LSTATUS

RegOpenKeyTransactedA (
     HKEY hKey,
     LPCSTR lpSubKey,
     DWORD ulOptions,
     REGSAM samDesired,
     PHKEY phkResult,
            HANDLE hTransaction,
     PVOID  pExtendedParemeter
    );

LSTATUS

RegOpenKeyTransactedW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     DWORD ulOptions,
     REGSAM samDesired,
     PHKEY phkResult,
            HANDLE hTransaction,
     PVOID  pExtendedParemeter
    );

LSTATUS

RegQueryInfoKeyA (
     HKEY hKey,
     LPSTR lpClass,
     LPDWORD lpcchClass,
     LPDWORD lpReserved,
     LPDWORD lpcSubKeys,
     LPDWORD lpcbMaxSubKeyLen,
     LPDWORD lpcbMaxClassLen,
     LPDWORD lpcValues,
     LPDWORD lpcbMaxValueNameLen,
     LPDWORD lpcbMaxValueLen,
     LPDWORD lpcbSecurityDescriptor,
     PFILETIME lpftLastWriteTime
    );

LSTATUS

RegQueryInfoKeyW (
     HKEY hKey,
     LPWSTR lpClass,
     LPDWORD lpcchClass,
     LPDWORD lpReserved,
     LPDWORD lpcSubKeys,
     LPDWORD lpcbMaxSubKeyLen,
     LPDWORD lpcbMaxClassLen,
     LPDWORD lpcValues,
     LPDWORD lpcbMaxValueNameLen,
     LPDWORD lpcbMaxValueLen,
     LPDWORD lpcbSecurityDescriptor,
     PFILETIME lpftLastWriteTime
    );

LSTATUS

RegQueryValueA (
     HKEY hKey,
     LPCSTR lpSubKey,
      LPSTR lpData,
     PLONG lpcbData
    );

LSTATUS

RegQueryValueW (
     HKEY hKey,
     LPCWSTR lpSubKey,
      LPWSTR lpData,
     PLONG lpcbData
    );

LSTATUS

RegQueryMultipleValuesA (
     HKEY hKey,
     PVALENTA val_list,
     DWORD num_vals,
      LPSTR lpValueBuf,
     LPDWORD ldwTotsize
    );

LSTATUS

RegQueryMultipleValuesW (
     HKEY hKey,
     PVALENTW val_list,
     DWORD num_vals,
      LPWSTR lpValueBuf,
     LPDWORD ldwTotsize
    );

LSTATUS

RegQueryValueExA (
     HKEY hKey,
     LPCSTR lpValueName,
     LPDWORD lpReserved,
     LPDWORD lpType,
      LPBYTE lpData,
     LPDWORD lpcbData
    );

LSTATUS

RegQueryValueExW (
     HKEY hKey,
     LPCWSTR lpValueName,
     LPDWORD lpReserved,
     LPDWORD lpType,
      LPBYTE lpData,
     LPDWORD lpcbData
    );

LSTATUS

RegReplaceKeyA (
     HKEY hKey,
     LPCSTR lpSubKey,
     LPCSTR lpNewFile,
     LPCSTR lpOldFile
    );

LSTATUS

RegReplaceKeyW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     LPCWSTR lpNewFile,
     LPCWSTR lpOldFile
    );

LSTATUS

RegRestoreKeyA (
     HKEY hKey,
     LPCSTR lpFile,
     DWORD dwFlags
    );

LSTATUS

RegRestoreKeyW (
     HKEY hKey,
     LPCWSTR lpFile,
     DWORD dwFlags
    );

LSTATUS

RegSaveKeyA (
     HKEY hKey,
     LPCSTR lpFile,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

LSTATUS

RegSaveKeyW (
     HKEY hKey,
     LPCWSTR lpFile,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

LSTATUS

RegSetKeySecurity (
     HKEY hKey,
     SECURITY_INFORMATION SecurityInformation,
     PSECURITY_DESCRIPTOR pSecurityDescriptor
    );

LSTATUS

RegSetValueA (
     HKEY hKey,
     LPCSTR lpSubKey,
     DWORD dwType,
     LPCSTR lpData,
     DWORD cbData
    );

LSTATUS

RegSetValueW (
     HKEY hKey,
     LPCWSTR lpSubKey,
     DWORD dwType,
     LPCWSTR lpData,
     DWORD cbData
    );

LSTATUS

RegSetValueExA (
     HKEY hKey,
     LPCSTR lpValueName,
     DWORD Reserved,
     DWORD dwType,
     const BYTE* lpData,
     DWORD cbData
    );

LSTATUS

RegSetValueExW (
     HKEY hKey,
     LPCWSTR lpValueName,
     DWORD Reserved,
     DWORD dwType,
     const BYTE* lpData,
     DWORD cbData
    );

LSTATUS

RegUnLoadKeyA (
     HKEY    hKey,
     LPCSTR lpSubKey
    );

LSTATUS

RegUnLoadKeyW (
     HKEY    hKey,
     LPCWSTR lpSubKey
    );

LSTATUS

RegDeleteKeyValueA (
          HKEY     hKey,
      LPCSTR lpSubKey,
      LPCSTR lpValueName
    );

LSTATUS

RegDeleteKeyValueW (
          HKEY     hKey,
      LPCWSTR lpSubKey,
      LPCWSTR lpValueName
    );

LSTATUS

RegSetKeyValueA (
            HKEY     hKey,
        LPCSTR  lpSubKey,
        LPCSTR  lpValueName,
            DWORD    dwType,
     LPCVOID  lpData,
            DWORD    cbData
    );

LSTATUS

RegSetKeyValueW (
            HKEY     hKey,
        LPCWSTR  lpSubKey,
        LPCWSTR  lpValueName,
            DWORD    dwType,
     LPCVOID  lpData,
            DWORD    cbData
    );

LSTATUS

RegDeleteTreeA (
            HKEY     hKey,
        LPCSTR  lpSubKey
    );

LSTATUS

RegDeleteTreeW (
            HKEY     hKey,
        LPCWSTR  lpSubKey
    );

LSTATUS

RegCopyTreeA (
            HKEY     hKeySrc,
        LPCSTR  lpSubKey,
            HKEY     hKeyDest
    );

LSTATUS

RegCopyTreeW (
            HKEY     hKeySrc,
        LPCWSTR  lpSubKey,
            HKEY     hKeyDest
    );

LSTATUS

RegGetValueA (
     HKEY    hkey,
     LPCSTR  lpSubKey,
     LPCSTR  lpValue,
     DWORD    dwFlags,
     LPDWORD pdwType,
     PVOID   pvData,
     LPDWORD pcbData
    );

LSTATUS

RegGetValueW (
     HKEY    hkey,
     LPCWSTR  lpSubKey,
     LPCWSTR  lpValue,
     DWORD    dwFlags,
     LPDWORD pdwType,
     PVOID   pvData,
     LPDWORD pcbData
    );

LSTATUS

RegLoadMUIStringA (
                                        HKEY        hKey,
                                    LPCSTR    pszValue,
                      LPSTR     pszOutBuf,
                                        DWORD       cbOutBuf,
                                   LPDWORD     pcbData,
                                        DWORD       Flags,
                                    LPCSTR    pszDirectory
                    );

LSTATUS

RegLoadMUIStringW (
                                        HKEY        hKey,
                                    LPCWSTR    pszValue,
                      LPWSTR     pszOutBuf,
                                        DWORD       cbOutBuf,
                                   LPDWORD     pcbData,
                                        DWORD       Flags,
                                    LPCWSTR    pszDirectory
                    );

LSTATUS

RegLoadAppKeyA (
                LPCSTR    lpFile,
               PHKEY       phkResult,
                REGSAM      samDesired,
                DWORD       dwOptions,
          DWORD       Reserved
    );

LSTATUS

RegLoadAppKeyW (
                LPCWSTR    lpFile,
               PHKEY       phkResult,
                REGSAM      samDesired,
                DWORD       dwOptions,
          DWORD       Reserved
    );

BOOL

InitiateSystemShutdownA(
     LPSTR lpMachineName,
     LPSTR lpMessage,
     DWORD dwTimeout,
     BOOL bForceAppsClosed,
     BOOL bRebootAfterShutdown
    );

BOOL

InitiateSystemShutdownW(
     LPWSTR lpMachineName,
     LPWSTR lpMessage,
     DWORD dwTimeout,
     BOOL bForceAppsClosed,
     BOOL bRebootAfterShutdown
    );

BOOL

AbortSystemShutdownA(
     LPSTR lpMachineName
    );

BOOL

AbortSystemShutdownW(
     LPWSTR lpMachineName
    );

BOOL

InitiateSystemShutdownExA(
     LPSTR lpMachineName,
     LPSTR lpMessage,
     DWORD dwTimeout,
     BOOL bForceAppsClosed,
     BOOL bRebootAfterShutdown,
     DWORD dwReason
    );

BOOL

InitiateSystemShutdownExW(
     LPWSTR lpMachineName,
     LPWSTR lpMessage,
     DWORD dwTimeout,
     BOOL bForceAppsClosed,
     BOOL bRebootAfterShutdown,
     DWORD dwReason
    );

DWORD

InitiateShutdownA(
     LPSTR lpMachineName,
     LPSTR lpMessage,
         DWORD dwGracePeriod,
         DWORD dwShutdownFlags,
         DWORD dwReason
    );

DWORD

InitiateShutdownW(
     LPWSTR lpMachineName,
     LPWSTR lpMessage,
         DWORD dwGracePeriod,
         DWORD dwShutdownFlags,
         DWORD dwReason
    );

LSTATUS

RegSaveKeyExA (
     HKEY hKey,
     LPCSTR lpFile,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     DWORD Flags
    );

LSTATUS

RegSaveKeyExW (
     HKEY hKey,
     LPCWSTR lpFile,
     const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     DWORD Flags
    );

LONG

Wow64Win32ApiEntry (
     DWORD dwFuncNumber,
     DWORD dwFlag,
     DWORD dwRes
    );
typedef struct  _NETRESOURCEA {
    DWORD    dwScope;
    DWORD    dwType;
    DWORD    dwDisplayType;
    DWORD    dwUsage;
    LPSTR    lpLocalName;
    LPSTR    lpRemoteName;
    LPSTR    lpComment ;
    LPSTR    lpProvider;
}NETRESOURCEA, *LPNETRESOURCEA;
typedef struct  _NETRESOURCEW {
    DWORD    dwScope;
    DWORD    dwType;
    DWORD    dwDisplayType;
    DWORD    dwUsage;
    LPWSTR   lpLocalName;
    LPWSTR   lpRemoteName;
    LPWSTR   lpComment ;
    LPWSTR   lpProvider;
}NETRESOURCEW, *LPNETRESOURCEW;
typedef NETRESOURCEA NETRESOURCE;
typedef LPNETRESOURCEA LPNETRESOURCE;
DWORD
WNetAddConnectionA(
         LPCSTR   lpRemoteName,
     LPCSTR   lpPassword,
     LPCSTR   lpLocalName
    );
DWORD
WNetAddConnectionW(
         LPCWSTR   lpRemoteName,
     LPCWSTR   lpPassword,
     LPCWSTR   lpLocalName
    );
DWORD
WNetAddConnection2A(
         LPNETRESOURCEA lpNetResource,
     LPCSTR       lpPassword,
     LPCSTR       lpUserName,
         DWORD          dwFlags
    );
DWORD
WNetAddConnection2W(
         LPNETRESOURCEW lpNetResource,
     LPCWSTR       lpPassword,
     LPCWSTR       lpUserName,
         DWORD          dwFlags
    );
DWORD
WNetAddConnection3A(
     HWND           hwndOwner,
         LPNETRESOURCEA lpNetResource,
     LPCSTR       lpPassword,
     LPCSTR       lpUserName,
         DWORD          dwFlags
    );
DWORD
WNetAddConnection3W(
     HWND           hwndOwner,
         LPNETRESOURCEW lpNetResource,
     LPCWSTR       lpPassword,
     LPCWSTR       lpUserName,
         DWORD          dwFlags
    );
DWORD
WNetCancelConnectionA(
     LPCSTR lpName,
     BOOL     fForce
    );
DWORD
WNetCancelConnectionW(
     LPCWSTR lpName,
     BOOL     fForce
    );
DWORD
WNetCancelConnection2A(
     LPCSTR lpName,
     DWORD    dwFlags,
     BOOL     fForce
    );
DWORD
WNetCancelConnection2W(
     LPCWSTR lpName,
     DWORD    dwFlags,
     BOOL     fForce
    );
DWORD
WNetGetConnectionA(
     LPCSTR lpLocalName,
     LPSTR  lpRemoteName,
     LPDWORD lpnLength
    );
DWORD
WNetGetConnectionW(
     LPCWSTR lpLocalName,
     LPWSTR  lpRemoteName,
     LPDWORD lpnLength
    );
DWORD
WNetRestoreSingleConnectionW(
     HWND    hwndParent,
         LPCWSTR lpDevice,
         BOOL    fUseUI
    );
DWORD
WNetUseConnectionA(
     HWND            hwndOwner,
         LPNETRESOURCEA  lpNetResource,
     LPCSTR        lpPassword,
     LPCSTR        lpUserId,
         DWORD           dwFlags,
     LPSTR lpAccessName,
     LPDWORD lpBufferSize,
     LPDWORD   lpResult
    );
DWORD
WNetUseConnectionW(
     HWND            hwndOwner,
         LPNETRESOURCEW  lpNetResource,
     LPCWSTR        lpPassword,
     LPCWSTR        lpUserId,
         DWORD           dwFlags,
     LPWSTR lpAccessName,
     LPDWORD lpBufferSize,
     LPDWORD   lpResult
    );
DWORD
WNetConnectionDialog(
     HWND  hwnd,
     DWORD dwType
    );
DWORD
WNetDisconnectDialog(
     HWND  hwnd,
     DWORD dwType
    );
typedef struct _CONNECTDLGSTRUCTA{
    DWORD cbStructure;
    HWND hwndOwner;
    LPNETRESOURCEA lpConnRes;
    DWORD dwFlags;
    DWORD dwDevNum;
} CONNECTDLGSTRUCTA,  *LPCONNECTDLGSTRUCTA;
typedef struct _CONNECTDLGSTRUCTW{
    DWORD cbStructure;
    HWND hwndOwner;
    LPNETRESOURCEW lpConnRes;
    DWORD dwFlags;
    DWORD dwDevNum;
} CONNECTDLGSTRUCTW,  *LPCONNECTDLGSTRUCTW;
typedef CONNECTDLGSTRUCTA CONNECTDLGSTRUCT;
typedef LPCONNECTDLGSTRUCTA LPCONNECTDLGSTRUCT;
DWORD
WNetConnectionDialog1A(
     LPCONNECTDLGSTRUCTA lpConnDlgStruct
    );
DWORD
WNetConnectionDialog1W(
     LPCONNECTDLGSTRUCTW lpConnDlgStruct
    );
typedef struct _DISCDLGSTRUCTA{
    DWORD           cbStructure;
    HWND            hwndOwner;
    LPSTR           lpLocalName;
    LPSTR           lpRemoteName;
    DWORD           dwFlags;
} DISCDLGSTRUCTA,  *LPDISCDLGSTRUCTA;
typedef struct _DISCDLGSTRUCTW{
    DWORD           cbStructure;
    HWND            hwndOwner;
    LPWSTR          lpLocalName;
    LPWSTR          lpRemoteName;
    DWORD           dwFlags;
} DISCDLGSTRUCTW,  *LPDISCDLGSTRUCTW;
typedef DISCDLGSTRUCTA DISCDLGSTRUCT;
typedef LPDISCDLGSTRUCTA LPDISCDLGSTRUCT;
DWORD
WNetDisconnectDialog1A(
     LPDISCDLGSTRUCTA lpConnDlgStruct
    );
DWORD
WNetDisconnectDialog1W(
     LPDISCDLGSTRUCTW lpConnDlgStruct
    );
DWORD
WNetOpenEnumA(
      DWORD          dwScope,
      DWORD          dwType,
      DWORD          dwUsage,
     LPNETRESOURCEA lpNetResource,
     LPHANDLE       lphEnum
    );
DWORD
WNetOpenEnumW(
      DWORD          dwScope,
      DWORD          dwType,
      DWORD          dwUsage,
     LPNETRESOURCEW lpNetResource,
     LPHANDLE       lphEnum
    );
DWORD
WNetEnumResourceA(
        HANDLE  hEnum,
     LPDWORD lpcCount,
     LPVOID  lpBuffer,
     LPDWORD lpBufferSize
    );
DWORD
WNetEnumResourceW(
        HANDLE  hEnum,
     LPDWORD lpcCount,
     LPVOID  lpBuffer,
     LPDWORD lpBufferSize
    );
DWORD
WNetCloseEnum(
     HANDLE   hEnum
    );
DWORD
WNetGetResourceParentA(
     LPNETRESOURCEA lpNetResource,
     LPVOID lpBuffer,
     LPDWORD lpcbBuffer
    );
DWORD
WNetGetResourceParentW(
     LPNETRESOURCEW lpNetResource,
     LPVOID lpBuffer,
     LPDWORD lpcbBuffer
    );
DWORD
WNetGetResourceInformationA(
     LPNETRESOURCEA  lpNetResource,
     LPVOID lpBuffer,
     LPDWORD lpcbBuffer,
     LPSTR *lplpSystem
    );
DWORD
WNetGetResourceInformationW(
     LPNETRESOURCEW  lpNetResource,
     LPVOID lpBuffer,
     LPDWORD lpcbBuffer,
     LPWSTR *lplpSystem
    );
typedef struct  _UNIVERSAL_NAME_INFOA {
    LPSTR    lpUniversalName;
}UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA;
typedef struct  _UNIVERSAL_NAME_INFOW {
    LPWSTR   lpUniversalName;
}UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW;
typedef UNIVERSAL_NAME_INFOA UNIVERSAL_NAME_INFO;
typedef LPUNIVERSAL_NAME_INFOA LPUNIVERSAL_NAME_INFO;
typedef struct  _REMOTE_NAME_INFOA {
    LPSTR    lpUniversalName;
    LPSTR    lpConnectionName;
    LPSTR    lpRemainingPath;
}REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA;
typedef struct  _REMOTE_NAME_INFOW {
    LPWSTR   lpUniversalName;
    LPWSTR   lpConnectionName;
    LPWSTR   lpRemainingPath;
}REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW;
typedef REMOTE_NAME_INFOA REMOTE_NAME_INFO;
typedef LPREMOTE_NAME_INFOA LPREMOTE_NAME_INFO;
DWORD
WNetGetUniversalNameA(
     LPCSTR lpLocalPath,
     DWORD    dwInfoLevel,
     LPVOID lpBuffer,
     LPDWORD lpBufferSize
    );
DWORD
WNetGetUniversalNameW(
     LPCWSTR lpLocalPath,
     DWORD    dwInfoLevel,
     LPVOID lpBuffer,
     LPDWORD lpBufferSize
    );
DWORD
WNetGetUserA(
     LPCSTR  lpName,
     LPSTR lpUserName,
      LPDWORD lpnLength
    );
DWORD
WNetGetUserW(
     LPCWSTR  lpName,
     LPWSTR lpUserName,
      LPDWORD lpnLength
    );
DWORD
WNetGetProviderNameA(
        DWORD   dwNetType,
     LPSTR lpProviderName,
     LPDWORD lpBufferSize
    );
DWORD
WNetGetProviderNameW(
        DWORD   dwNetType,
     LPWSTR lpProviderName,
     LPDWORD lpBufferSize
    );
typedef struct _NETINFOSTRUCT{
    DWORD cbStructure;
    DWORD dwProviderVersion;
    DWORD dwStatus;
    DWORD dwCharacteristics;
    ULONG_PTR dwHandle;
    WORD  wNetType;
    DWORD dwPrinters;
    DWORD dwDrives;
} NETINFOSTRUCT,  *LPNETINFOSTRUCT;
DWORD
WNetGetNetworkInformationA(
      LPCSTR        lpProvider,
     LPNETINFOSTRUCT lpNetInfoStruct
    );
DWORD
WNetGetNetworkInformationW(
      LPCWSTR        lpProvider,
     LPNETINFOSTRUCT lpNetInfoStruct
    );
DWORD
WNetGetLastErrorA(
     LPDWORD    lpError,
     LPSTR lpErrorBuf,
     DWORD      nErrorBufSize,
     LPSTR  lpNameBuf,
     DWORD      nNameBufSize
    );
DWORD
WNetGetLastErrorW(
     LPDWORD    lpError,
     LPWSTR lpErrorBuf,
     DWORD      nErrorBufSize,
     LPWSTR  lpNameBuf,
     DWORD      nNameBufSize
    );
typedef struct _NETCONNECTINFOSTRUCT{
    DWORD cbStructure;
    DWORD dwFlags;
    DWORD dwSpeed;
    DWORD dwDelay;
    DWORD dwOptDataSize;
} NETCONNECTINFOSTRUCT,  *LPNETCONNECTINFOSTRUCT;
DWORD
MultinetGetConnectionPerformanceA(
      LPNETRESOURCEA lpNetResource,
     LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct
    );
DWORD
MultinetGetConnectionPerformanceW(
      LPNETRESOURCEW lpNetResource,
     LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct
    );
typedef struct {
        unsigned short bAppReturnCode:8,
                 reserved:6,
                 fBusy:1,
		 fAck:1;
} DDEACK;
typedef struct {
        unsigned short reserved:14,
                 fDeferUpd:1,
		 fAckReq:1;
	short     cfFormat;
} DDEADVISE;
typedef struct {
	unsigned short unused:12,
                 fResponse:1,
                 fRelease:1,
                 reserved:1,
                 fAckReq:1;
	short	 cfFormat;
	BYTE	 Value[1];
} DDEDATA;
typedef struct {
	unsigned short unused:13,
		 fRelease:1,
		 fReserved:2;
	short    cfFormat;
	BYTE	 Value[1];
} DDEPOKE;
typedef struct {
        unsigned short unused:13,
                 fRelease:1,
                 fDeferUpd:1,
		 fAckReq:1;
	short	 cfFormat;
} DDELN;
typedef struct {
	unsigned short unused:12,
                 fAck:1,
                 fRelease:1,
                 fReserved:1,
                 fAckReq:1;
	short	 cfFormat;
	BYTE	 rgb[1];
} DDEUP;
BOOL

DdeSetQualityOfService(
    HWND hwndClient,
    const SECURITY_QUALITY_OF_SERVICE *pqosNew,
    PSECURITY_QUALITY_OF_SERVICE pqosPrev);
BOOL

ImpersonateDdeClientWindow(
    HWND hWndClient,
    HWND hWndServer);
LPARAM  PackDDElParam(UINT msg, UINT_PTR uiLo, UINT_PTR uiHi);
BOOL    UnpackDDElParam(UINT msg, LPARAM lParam, PUINT_PTR puiLo, PUINT_PTR puiHi);
BOOL    FreeDDElParam(UINT msg, LPARAM lParam);
LPARAM  ReuseDDElParam(LPARAM lParam, UINT msgIn, UINT msgOut, UINT_PTR uiLo, UINT_PTR uiHi);
struct HCONVLIST__ { int unused; }; typedef struct HCONVLIST__ *HCONVLIST;
struct HCONV__ { int unused; }; typedef struct HCONV__ *HCONV;
struct HSZ__ { int unused; }; typedef struct HSZ__ *HSZ;
struct HDDEDATA__ { int unused; }; typedef struct HDDEDATA__ *HDDEDATA;
typedef struct tagHSZPAIR {
    HSZ hszSvc;
    HSZ hszTopic;
} HSZPAIR,  *PHSZPAIR;
typedef struct tagCONVCONTEXT {
    UINT        cb;
    UINT        wFlags;
    UINT        wCountryID;
    int         iCodePage;
    DWORD       dwLangID;
    DWORD       dwSecurity;
    SECURITY_QUALITY_OF_SERVICE qos;
} CONVCONTEXT,  *PCONVCONTEXT;
typedef struct tagCONVINFO {
    DWORD   cb;
    DWORD_PTR hUser;
    HCONV   hConvPartner;
    HSZ     hszSvcPartner;
    HSZ     hszServiceReq;
    HSZ     hszTopic;
    HSZ     hszItem;
    UINT    wFmt;
    UINT    wType;
    UINT    wStatus;
    UINT    wConvst;
    UINT    wLastError;
    HCONVLIST hConvList;
    CONVCONTEXT ConvCtxt;
    HWND    hwnd;
    HWND    hwndPartner;
} CONVINFO,  *PCONVINFO;
typedef HDDEDATA  FNCALLBACK(UINT wType, UINT wFmt, HCONV hConv,
        HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2);
typedef HDDEDATA ( *PFNCALLBACK)(UINT wType, UINT wFmt, HCONV hConv,
        HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2);
UINT

DdeInitializeA(
     LPDWORD pidInst,
     PFNCALLBACK pfnCallback,
     DWORD afCmd,
     DWORD ulRes);
UINT

DdeInitializeW(
     LPDWORD pidInst,
     PFNCALLBACK pfnCallback,
     DWORD afCmd,
     DWORD ulRes);
BOOL

DdeUninitialize(
     DWORD idInst);
HCONVLIST

DdeConnectList(
     DWORD idInst,
     HSZ hszService,
     HSZ hszTopic,
     HCONVLIST hConvList,
     PCONVCONTEXT pCC);
HCONV

DdeQueryNextServer(
     HCONVLIST hConvList,
     HCONV hConvPrev);
BOOL

DdeDisconnectList(
     HCONVLIST hConvList);
HCONV

DdeConnect(
     DWORD idInst,
     HSZ hszService,
     HSZ hszTopic,
     PCONVCONTEXT pCC);
BOOL

DdeDisconnect(
     HCONV hConv);
HCONV

DdeReconnect(
     HCONV hConv);
UINT

DdeQueryConvInfo(
     HCONV hConv,
     DWORD idTransaction,
     PCONVINFO pConvInfo);
BOOL

DdeSetUserHandle(
     HCONV hConv,
     DWORD id,
     DWORD_PTR hUser);
BOOL

DdeAbandonTransaction(
     DWORD idInst,
     HCONV hConv,
     DWORD idTransaction);
BOOL

DdePostAdvise(
     DWORD idInst,
     HSZ hszTopic,
     HSZ hszItem);
BOOL

DdeEnableCallback(
     DWORD idInst,
     HCONV hConv,
     UINT wCmd);
BOOL

DdeImpersonateClient(
     HCONV hConv);
HDDEDATA

DdeNameService(
     DWORD idInst,
     HSZ hsz1,
     HSZ hsz2,
     UINT afCmd);
HDDEDATA

DdeClientTransaction(
     LPBYTE pData,
     DWORD cbData,
     HCONV hConv,
     HSZ hszItem,
     UINT wFmt,
     UINT wType,
     DWORD dwTimeout,
     LPDWORD pdwResult);
HDDEDATA

DdeCreateDataHandle(
     DWORD idInst,
     LPBYTE pSrc,
     DWORD cb,
     DWORD cbOff,
     HSZ hszItem,
     UINT wFmt,
     UINT afCmd);
HDDEDATA

DdeAddData(
     HDDEDATA hData,
     LPBYTE pSrc,
     DWORD cb,
     DWORD cbOff);
DWORD

DdeGetData(
     HDDEDATA hData,
     LPBYTE pDst,
     DWORD cbMax,
     DWORD cbOff);
LPBYTE

DdeAccessData(
     HDDEDATA hData,
     LPDWORD pcbDataSize);
BOOL

DdeUnaccessData(
     HDDEDATA hData);
BOOL

DdeFreeDataHandle(
     HDDEDATA hData);
UINT

DdeGetLastError(
     DWORD idInst);
HSZ

DdeCreateStringHandleA(
     DWORD idInst,
     LPCSTR psz,
     int iCodePage);
HSZ

DdeCreateStringHandleW(
     DWORD idInst,
     LPCWSTR psz,
     int iCodePage);
DWORD

DdeQueryStringA(
     DWORD idInst,
     HSZ hsz,
     LPSTR psz,
     DWORD cchMax,
     int iCodePage);
DWORD

DdeQueryStringW(
     DWORD idInst,
     HSZ hsz,
     LPWSTR psz,
     DWORD cchMax,
     int iCodePage);
BOOL

DdeFreeStringHandle(
     DWORD idInst,
     HSZ hsz);
BOOL

DdeKeepStringHandle(
     DWORD idInst,
     HSZ hsz);
int

DdeCmpStringHandles(
     HSZ hsz1,
     HSZ hsz2);
typedef struct tagDDEML_MSG_HOOK_DATA {
    UINT_PTR uiLo;
    UINT_PTR uiHi;
    DWORD cbData;
    DWORD Data[8];
} DDEML_MSG_HOOK_DATA, *PDDEML_MSG_HOOK_DATA;
typedef struct tagMONMSGSTRUCT {
    UINT    cb;
    HWND    hwndTo;
    DWORD   dwTime;
    HANDLE  hTask;
    UINT    wMsg;
    WPARAM  wParam;
    LPARAM  lParam;
    DDEML_MSG_HOOK_DATA dmhd;
} MONMSGSTRUCT, *PMONMSGSTRUCT;
typedef struct tagMONCBSTRUCT {
    UINT   cb;
    DWORD  dwTime;
    HANDLE hTask;
    DWORD  dwRet;
    UINT   wType;
    UINT   wFmt;
    HCONV  hConv;
    HSZ    hsz1;
    HSZ    hsz2;
    HDDEDATA hData;
    ULONG_PTR dwData1;
    ULONG_PTR dwData2;
    CONVCONTEXT cc;
    DWORD  cbData;
    DWORD  Data[8];
} MONCBSTRUCT, *PMONCBSTRUCT;
typedef struct tagMONHSZSTRUCTA {
    UINT   cb;
    BOOL   fsAction;
    DWORD  dwTime;
    HSZ    hsz;
    HANDLE hTask;
    CHAR    str[1];
} MONHSZSTRUCTA, *PMONHSZSTRUCTA;
typedef struct tagMONHSZSTRUCTW {
    UINT   cb;
    BOOL   fsAction;
    DWORD  dwTime;
    HSZ    hsz;
    HANDLE hTask;
    WCHAR   str[1];
} MONHSZSTRUCTW, *PMONHSZSTRUCTW;
typedef MONHSZSTRUCTA MONHSZSTRUCT;
typedef PMONHSZSTRUCTA PMONHSZSTRUCT;
typedef struct tagMONERRSTRUCT {
    UINT    cb;
    UINT    wLastError;
    DWORD   dwTime;
    HANDLE  hTask;
} MONERRSTRUCT, *PMONERRSTRUCT;
typedef struct tagMONLINKSTRUCT {
    UINT    cb;
    DWORD   dwTime;
    HANDLE  hTask;
    BOOL    fEstablished;
    BOOL    fNoData;
    HSZ     hszSvc;
    HSZ     hszTopic;
    HSZ     hszItem;
    UINT    wFmt;
    BOOL    fServer;
    HCONV   hConvServer;
    HCONV   hConvClient;
} MONLINKSTRUCT, *PMONLINKSTRUCT;
typedef struct tagMONCONVSTRUCT {
    UINT    cb;
    BOOL    fConnect;
    DWORD   dwTime;
    HANDLE  hTask;
    HSZ     hszSvc;
    HSZ     hszTopic;
    HCONV   hConvClient;
    HCONV   hConvServer;
} MONCONVSTRUCT, *PMONCONVSTRUCT;
typedef struct tagCRGB
{
    BYTE    bRed;
    BYTE    bGreen;
    BYTE    bBlue;
    BYTE    bExtra;
} CRGB;
INT

LZStart(
	void
	);
void

LZDone(
	void
	);
LONG

CopyLZFile(
	INT,
	INT
	);
LONG

LZCopy(
	INT,
	INT
	);
INT

LZInit(
	INT
	);
INT

GetExpandedNameA(
	LPSTR,
	LPSTR
	);
INT

GetExpandedNameW(
	LPWSTR,
	LPWSTR
	);
INT

LZOpenFileA(
	LPSTR,
	LPOFSTRUCT,
	WORD
	);
INT

LZOpenFileW(
	LPWSTR,
	LPOFSTRUCT,
	WORD
	);
LONG

LZSeek(
	INT,
	LONG,
	INT
	);
INT

LZRead(
	INT,
	LPSTR,
	INT
	);
void

LZClose(
	INT
	);
typedef UINT        MMVERSION;
typedef  UINT        MMRESULT;
typedef UINT    *LPUINT;
typedef struct mmtime_tag
{
    UINT            wType;
    union
    {
        DWORD       ms;
        DWORD       sample;
        DWORD       cb;
        DWORD       ticks;
        struct
        {
            BYTE    hour;
            BYTE    min;
            BYTE    sec;
            BYTE    frame;
            BYTE    fps;
            BYTE    dummy;
            BYTE    pad[2];
        } smpte;
        struct
        {
            DWORD songptrpos;
        } midi;
    } u;
} MMTIME, *PMMTIME,  *NPMMTIME,  *LPMMTIME;
struct HDRVR__ { int unused; }; typedef struct HDRVR__ *HDRVR;
typedef struct DRVCONFIGINFOEX {
    DWORD   dwDCISize;
    LPCWSTR  lpszDCISectionName;
    LPCWSTR  lpszDCIAliasName;
    DWORD    dnDevNode;
} DRVCONFIGINFOEX, *PDRVCONFIGINFOEX,  *NPDRVCONFIGINFOEX,  *LPDRVCONFIGINFOEX;
typedef struct tagDRVCONFIGINFO {
    DWORD   dwDCISize;
    LPCWSTR  lpszDCISectionName;
    LPCWSTR  lpszDCIAliasName;
} DRVCONFIGINFO, *PDRVCONFIGINFO,  *NPDRVCONFIGINFO,  *LPDRVCONFIGINFO;
typedef LRESULT (* DRIVERPROC)(DWORD_PTR, HDRVR, UINT, LPARAM, LPARAM);
 LRESULT    CloseDriver(  HDRVR hDriver,  LPARAM lParam1,  LPARAM lParam2);
 HDRVR      OpenDriver(  LPCWSTR szDriverName,  LPCWSTR szSectionName,  LPARAM lParam2);
 LRESULT    SendDriverMessage(  HDRVR hDriver,  UINT message,  LPARAM lParam1,  LPARAM lParam2);
 HMODULE    DrvGetModuleHandle(  HDRVR hDriver);
 HMODULE    GetDriverModuleHandle(  HDRVR hDriver);
 LRESULT    DefDriverProc(  DWORD_PTR dwDriverIdentifier,  HDRVR hdrvr,  UINT uMsg,  LPARAM lParam1,  LPARAM lParam2);
typedef void ( DRVCALLBACK)(HDRVR hdrvr, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2);
typedef DRVCALLBACK  *LPDRVCALLBACK;
typedef DRVCALLBACK     *PDRVCALLBACK;
 BOOL  sndPlaySoundA(  LPCSTR pszSound,  UINT fuSound);
 BOOL  sndPlaySoundW(  LPCWSTR pszSound,  UINT fuSound);
 BOOL  PlaySoundA(  LPCSTR pszSound,  HMODULE hmod,  DWORD fdwSound);
 BOOL  PlaySoundW(  LPCWSTR pszSound,  HMODULE hmod,  DWORD fdwSound);
struct HWAVE__ { int unused; }; typedef struct HWAVE__ *HWAVE;
struct HWAVEIN__ { int unused; }; typedef struct HWAVEIN__ *HWAVEIN;
struct HWAVEOUT__ { int unused; }; typedef struct HWAVEOUT__ *HWAVEOUT;
typedef HWAVEIN  *LPHWAVEIN;
typedef HWAVEOUT  *LPHWAVEOUT;
typedef DRVCALLBACK WAVECALLBACK;
typedef WAVECALLBACK  *LPWAVECALLBACK;
typedef struct wavehdr_tag {
    LPSTR       lpData;
    DWORD       dwBufferLength;
    DWORD       dwBytesRecorded;
    DWORD_PTR   dwUser;
    DWORD       dwFlags;
    DWORD       dwLoops;
    struct wavehdr_tag  *lpNext;
    DWORD_PTR   reserved;
} WAVEHDR, *PWAVEHDR,  *NPWAVEHDR,  *LPWAVEHDR;
typedef struct tagWAVEOUTCAPSA {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    DWORD   dwSupport;
} WAVEOUTCAPSA, *PWAVEOUTCAPSA, *NPWAVEOUTCAPSA, *LPWAVEOUTCAPSA;
typedef struct tagWAVEOUTCAPSW {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    DWORD   dwSupport;
} WAVEOUTCAPSW, *PWAVEOUTCAPSW, *NPWAVEOUTCAPSW, *LPWAVEOUTCAPSW;
typedef WAVEOUTCAPSA WAVEOUTCAPS;
typedef PWAVEOUTCAPSA PWAVEOUTCAPS;
typedef NPWAVEOUTCAPSA NPWAVEOUTCAPS;
typedef LPWAVEOUTCAPSA LPWAVEOUTCAPS;
typedef struct tagWAVEOUTCAPS2A {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    DWORD   dwSupport;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} WAVEOUTCAPS2A, *PWAVEOUTCAPS2A, *NPWAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;
typedef struct tagWAVEOUTCAPS2W {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    DWORD   dwSupport;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} WAVEOUTCAPS2W, *PWAVEOUTCAPS2W, *NPWAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;
typedef WAVEOUTCAPS2A WAVEOUTCAPS2;
typedef PWAVEOUTCAPS2A PWAVEOUTCAPS2;
typedef NPWAVEOUTCAPS2A NPWAVEOUTCAPS2;
typedef LPWAVEOUTCAPS2A LPWAVEOUTCAPS2;
typedef struct tagWAVEINCAPSA {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
} WAVEINCAPSA, *PWAVEINCAPSA, *NPWAVEINCAPSA, *LPWAVEINCAPSA;
typedef struct tagWAVEINCAPSW {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
} WAVEINCAPSW, *PWAVEINCAPSW, *NPWAVEINCAPSW, *LPWAVEINCAPSW;
typedef WAVEINCAPSA WAVEINCAPS;
typedef PWAVEINCAPSA PWAVEINCAPS;
typedef NPWAVEINCAPSA NPWAVEINCAPS;
typedef LPWAVEINCAPSA LPWAVEINCAPS;
typedef struct tagWAVEINCAPS2A {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} WAVEINCAPS2A, *PWAVEINCAPS2A, *NPWAVEINCAPS2A, *LPWAVEINCAPS2A;
typedef struct tagWAVEINCAPS2W {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    WORD    wReserved1;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} WAVEINCAPS2W, *PWAVEINCAPS2W, *NPWAVEINCAPS2W, *LPWAVEINCAPS2W;
typedef WAVEINCAPS2A WAVEINCAPS2;
typedef PWAVEINCAPS2A PWAVEINCAPS2;
typedef NPWAVEINCAPS2A NPWAVEINCAPS2;
typedef LPWAVEINCAPS2A LPWAVEINCAPS2;
typedef struct waveformat_tag {
    WORD    wFormatTag;
    WORD    nChannels;
    DWORD   nSamplesPerSec;
    DWORD   nAvgBytesPerSec;
    WORD    nBlockAlign;
} WAVEFORMAT, *PWAVEFORMAT,  *NPWAVEFORMAT,  *LPWAVEFORMAT;
typedef struct pcmwaveformat_tag {
    WAVEFORMAT  wf;
    WORD        wBitsPerSample;
} PCMWAVEFORMAT, *PPCMWAVEFORMAT,  *NPPCMWAVEFORMAT,  *LPPCMWAVEFORMAT;
typedef struct tWAVEFORMATEX
{
    WORD        wFormatTag;
    WORD        nChannels;
    DWORD       nSamplesPerSec;
    DWORD       nAvgBytesPerSec;
    WORD        nBlockAlign;
    WORD        wBitsPerSample;
    WORD        cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX,  *NPWAVEFORMATEX,  *LPWAVEFORMATEX;
typedef const WAVEFORMATEX  *LPCWAVEFORMATEX;
 UINT  waveOutGetNumDevs(void);
 MMRESULT  waveOutGetDevCapsA(  UINT_PTR uDeviceID,  LPWAVEOUTCAPSA pwoc,  UINT cbwoc);
 MMRESULT  waveOutGetDevCapsW(  UINT_PTR uDeviceID,  LPWAVEOUTCAPSW pwoc,  UINT cbwoc);
 MMRESULT  waveOutGetVolume(  HWAVEOUT hwo,  LPDWORD pdwVolume);
 MMRESULT  waveOutSetVolume(  HWAVEOUT hwo,  DWORD dwVolume);
 MMRESULT  waveOutGetErrorTextA(  MMRESULT mmrError,  LPSTR pszText,  UINT cchText);
 MMRESULT  waveOutGetErrorTextW(  MMRESULT mmrError,  LPWSTR pszText,  UINT cchText);
 MMRESULT  waveOutOpen(  LPHWAVEOUT phwo,  UINT uDeviceID,
     LPCWAVEFORMATEX pwfx,  DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  waveOutClose(  HWAVEOUT hwo);
 MMRESULT  waveOutPrepareHeader(  HWAVEOUT hwo,  LPWAVEHDR pwh,   UINT cbwh);
 MMRESULT  waveOutUnprepareHeader(  HWAVEOUT hwo,  LPWAVEHDR pwh,  UINT cbwh);
 MMRESULT  waveOutWrite(  HWAVEOUT hwo,  LPWAVEHDR pwh,  UINT cbwh);
 MMRESULT  waveOutPause(  HWAVEOUT hwo);
 MMRESULT  waveOutRestart(  HWAVEOUT hwo);
 MMRESULT  waveOutReset(  HWAVEOUT hwo);
 MMRESULT  waveOutBreakLoop(  HWAVEOUT hwo);
 MMRESULT  waveOutGetPosition(  HWAVEOUT hwo,  LPMMTIME pmmt,  UINT cbmmt);
 MMRESULT  waveOutGetPitch(  HWAVEOUT hwo,  LPDWORD pdwPitch);
 MMRESULT  waveOutSetPitch(  HWAVEOUT hwo,  DWORD dwPitch);
 MMRESULT  waveOutGetPlaybackRate(  HWAVEOUT hwo,  LPDWORD pdwRate);
 MMRESULT  waveOutSetPlaybackRate(  HWAVEOUT hwo,  DWORD dwRate);
 MMRESULT  waveOutGetID(  HWAVEOUT hwo,  LPUINT puDeviceID);
 MMRESULT  waveOutMessage(  HWAVEOUT hwo,  UINT uMsg,  DWORD_PTR dw1,  DWORD_PTR dw2);
  UINT  waveInGetNumDevs(void);
 MMRESULT  waveInGetDevCapsA(  UINT_PTR uDeviceID,  LPWAVEINCAPSA pwic,  UINT cbwic);
 MMRESULT  waveInGetDevCapsW(  UINT_PTR uDeviceID,  LPWAVEINCAPSW pwic,  UINT cbwic);
 MMRESULT  waveInGetErrorTextA( MMRESULT mmrError,  LPSTR pszText,  UINT cchText);
 MMRESULT  waveInGetErrorTextW( MMRESULT mmrError,  LPWSTR pszText,  UINT cchText);
 MMRESULT  waveInOpen(  LPHWAVEIN phwi,  UINT uDeviceID,
     LPCWAVEFORMATEX pwfx,  DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  waveInClose(  HWAVEIN hwi);
 MMRESULT  waveInPrepareHeader(  HWAVEIN hwi,  LPWAVEHDR pwh,  UINT cbwh);
 MMRESULT  waveInUnprepareHeader(  HWAVEIN hwi,  LPWAVEHDR pwh,  UINT cbwh);
 MMRESULT  waveInAddBuffer(  HWAVEIN hwi,  LPWAVEHDR pwh,  UINT cbwh);
 MMRESULT  waveInStart(  HWAVEIN hwi);
 MMRESULT  waveInStop(  HWAVEIN hwi);
 MMRESULT  waveInReset(  HWAVEIN hwi);
 MMRESULT  waveInGetPosition(  HWAVEIN hwi,  LPMMTIME pmmt,  UINT cbmmt);
 MMRESULT  waveInGetID(  HWAVEIN hwi,  LPUINT puDeviceID);
 MMRESULT  waveInMessage(  HWAVEIN hwi,  UINT uMsg,  DWORD_PTR dw1,  DWORD_PTR dw2);
struct HMIDI__ { int unused; }; typedef struct HMIDI__ *HMIDI;
struct HMIDIIN__ { int unused; }; typedef struct HMIDIIN__ *HMIDIIN;
struct HMIDIOUT__ { int unused; }; typedef struct HMIDIOUT__ *HMIDIOUT;
struct HMIDISTRM__ { int unused; }; typedef struct HMIDISTRM__ *HMIDISTRM;
typedef HMIDI  *LPHMIDI;
typedef HMIDIIN  *LPHMIDIIN;
typedef HMIDIOUT  *LPHMIDIOUT;
typedef HMIDISTRM  *LPHMIDISTRM;
typedef DRVCALLBACK MIDICALLBACK;
typedef MIDICALLBACK  *LPMIDICALLBACK;
typedef WORD PATCHARRAY[128];
typedef WORD  *LPPATCHARRAY;
typedef WORD KEYARRAY[128];
typedef WORD  *LPKEYARRAY;
typedef struct tagMIDIOUTCAPSA {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    WORD    wTechnology;
    WORD    wVoices;
    WORD    wNotes;
    WORD    wChannelMask;
    DWORD   dwSupport;
} MIDIOUTCAPSA, *PMIDIOUTCAPSA, *NPMIDIOUTCAPSA, *LPMIDIOUTCAPSA;
typedef struct tagMIDIOUTCAPSW {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    WORD    wTechnology;
    WORD    wVoices;
    WORD    wNotes;
    WORD    wChannelMask;
    DWORD   dwSupport;
} MIDIOUTCAPSW, *PMIDIOUTCAPSW, *NPMIDIOUTCAPSW, *LPMIDIOUTCAPSW;
typedef MIDIOUTCAPSA MIDIOUTCAPS;
typedef PMIDIOUTCAPSA PMIDIOUTCAPS;
typedef NPMIDIOUTCAPSA NPMIDIOUTCAPS;
typedef LPMIDIOUTCAPSA LPMIDIOUTCAPS;
typedef struct tagMIDIOUTCAPS2A {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    CHAR    szPname[32];
    WORD    wTechnology;
    WORD    wVoices;
    WORD    wNotes;
    WORD    wChannelMask;
    DWORD   dwSupport;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} MIDIOUTCAPS2A, *PMIDIOUTCAPS2A, *NPMIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;
typedef struct tagMIDIOUTCAPS2W {
    WORD    wMid;
    WORD    wPid;
    MMVERSION vDriverVersion;
    WCHAR   szPname[32];
    WORD    wTechnology;
    WORD    wVoices;
    WORD    wNotes;
    WORD    wChannelMask;
    DWORD   dwSupport;
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} MIDIOUTCAPS2W, *PMIDIOUTCAPS2W, *NPMIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;
typedef MIDIOUTCAPS2A MIDIOUTCAPS2;
typedef PMIDIOUTCAPS2A PMIDIOUTCAPS2;
typedef NPMIDIOUTCAPS2A NPMIDIOUTCAPS2;
typedef LPMIDIOUTCAPS2A LPMIDIOUTCAPS2;
typedef struct tagMIDIINCAPSA {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    CHAR        szPname[32];
    DWORD   dwSupport;
} MIDIINCAPSA, *PMIDIINCAPSA, *NPMIDIINCAPSA, *LPMIDIINCAPSA;
typedef struct tagMIDIINCAPSW {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    WCHAR       szPname[32];
    DWORD   dwSupport;
} MIDIINCAPSW, *PMIDIINCAPSW, *NPMIDIINCAPSW, *LPMIDIINCAPSW;
typedef MIDIINCAPSA MIDIINCAPS;
typedef PMIDIINCAPSA PMIDIINCAPS;
typedef NPMIDIINCAPSA NPMIDIINCAPS;
typedef LPMIDIINCAPSA LPMIDIINCAPS;
typedef struct tagMIDIINCAPS2A {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    CHAR        szPname[32];
    DWORD       dwSupport;
    GUID        ManufacturerGuid;
    GUID        ProductGuid;
    GUID        NameGuid;
} MIDIINCAPS2A, *PMIDIINCAPS2A, *NPMIDIINCAPS2A, *LPMIDIINCAPS2A;
typedef struct tagMIDIINCAPS2W {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    WCHAR       szPname[32];
    DWORD       dwSupport;
    GUID        ManufacturerGuid;
    GUID        ProductGuid;
    GUID        NameGuid;
} MIDIINCAPS2W, *PMIDIINCAPS2W, *NPMIDIINCAPS2W, *LPMIDIINCAPS2W;
typedef MIDIINCAPS2A MIDIINCAPS2;
typedef PMIDIINCAPS2A PMIDIINCAPS2;
typedef NPMIDIINCAPS2A NPMIDIINCAPS2;
typedef LPMIDIINCAPS2A LPMIDIINCAPS2;
typedef struct midihdr_tag {
    LPSTR       lpData;
    DWORD       dwBufferLength;
    DWORD       dwBytesRecorded;
    DWORD_PTR   dwUser;
    DWORD       dwFlags;
    struct midihdr_tag  *lpNext;
    DWORD_PTR   reserved;
    DWORD       dwOffset;
    DWORD_PTR   dwReserved[8];
} MIDIHDR, *PMIDIHDR,  *NPMIDIHDR,  *LPMIDIHDR;
typedef struct midievent_tag
{
    DWORD       dwDeltaTime;
    DWORD       dwStreamID;
    DWORD       dwEvent;
    DWORD       dwParms[1];
} MIDIEVENT;
typedef struct midistrmbuffver_tag
{
    DWORD       dwVersion;
    DWORD       dwMid;
    DWORD       dwOEMVersion;
} MIDISTRMBUFFVER;
typedef struct midiproptimediv_tag
{
    DWORD       cbStruct;
    DWORD       dwTimeDiv;
} MIDIPROPTIMEDIV,  *LPMIDIPROPTIMEDIV;
typedef struct midiproptempo_tag
{
    DWORD       cbStruct;
    DWORD       dwTempo;
} MIDIPROPTEMPO,  *LPMIDIPROPTEMPO;
  UINT  midiOutGetNumDevs(void);
 MMRESULT  midiStreamOpen(  LPHMIDISTRM phms,  LPUINT puDeviceID,  DWORD cMidi,  DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  midiStreamClose(  HMIDISTRM hms);
 MMRESULT  midiStreamProperty(  HMIDISTRM hms,  LPBYTE lppropdata,  DWORD dwProperty);
 MMRESULT  midiStreamPosition(  HMIDISTRM hms,  LPMMTIME lpmmt,  UINT cbmmt);
 MMRESULT  midiStreamOut(  HMIDISTRM hms,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiStreamPause(  HMIDISTRM hms);
 MMRESULT  midiStreamRestart(  HMIDISTRM hms);
 MMRESULT  midiStreamStop(  HMIDISTRM hms);
 MMRESULT  midiConnect(  HMIDI hmi,  HMIDIOUT hmo,  LPVOID pReserved);
 MMRESULT  midiDisconnect(  HMIDI hmi,  HMIDIOUT hmo,  LPVOID pReserved);
 MMRESULT  midiOutGetDevCapsA(  UINT_PTR uDeviceID,  LPMIDIOUTCAPSA pmoc,  UINT cbmoc);
 MMRESULT  midiOutGetDevCapsW(  UINT_PTR uDeviceID,  LPMIDIOUTCAPSW pmoc,  UINT cbmoc);
 MMRESULT  midiOutGetVolume(  HMIDIOUT hmo,  LPDWORD pdwVolume);
 MMRESULT  midiOutSetVolume(  HMIDIOUT hmo,  DWORD dwVolume);
 MMRESULT  midiOutGetErrorTextA(  MMRESULT mmrError,  LPSTR pszText,  UINT cchText);
 MMRESULT  midiOutGetErrorTextW(  MMRESULT mmrError,  LPWSTR pszText,  UINT cchText);
 MMRESULT  midiOutOpen(  LPHMIDIOUT phmo,  UINT uDeviceID,
     DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  midiOutClose(  HMIDIOUT hmo);
 MMRESULT  midiOutPrepareHeader(  HMIDIOUT hmo,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiOutUnprepareHeader( HMIDIOUT hmo,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiOutShortMsg(  HMIDIOUT hmo,  DWORD dwMsg);
 MMRESULT  midiOutLongMsg( HMIDIOUT hmo,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiOutReset(  HMIDIOUT hmo);
 MMRESULT  midiOutCachePatches(  HMIDIOUT hmo,  UINT uBank,  LPWORD pwpa,  UINT fuCache);
 MMRESULT  midiOutCacheDrumPatches(  HMIDIOUT hmo,  UINT uPatch,  LPWORD pwkya,  UINT fuCache);
 MMRESULT  midiOutGetID(  HMIDIOUT hmo,  LPUINT puDeviceID);
 MMRESULT  midiOutMessage(  HMIDIOUT hmo,  UINT uMsg,  DWORD_PTR dw1,  DWORD_PTR dw2);
 UINT  midiInGetNumDevs(void);
 MMRESULT  midiInGetDevCapsA(  UINT_PTR uDeviceID,  LPMIDIINCAPSA pmic,  UINT cbmic);
 MMRESULT  midiInGetDevCapsW(  UINT_PTR uDeviceID,  LPMIDIINCAPSW pmic,  UINT cbmic);
 MMRESULT  midiInGetErrorTextA(  MMRESULT mmrError,  LPSTR pszText,  UINT cchText);
 MMRESULT  midiInGetErrorTextW(  MMRESULT mmrError,  LPWSTR pszText,  UINT cchText);
 MMRESULT  midiInOpen(  LPHMIDIIN phmi,  UINT uDeviceID,
         DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  midiInClose(  HMIDIIN hmi);
 MMRESULT  midiInPrepareHeader(  HMIDIIN hmi,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiInUnprepareHeader(  HMIDIIN hmi,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiInAddBuffer(  HMIDIIN hmi,  LPMIDIHDR pmh,  UINT cbmh);
 MMRESULT  midiInStart(  HMIDIIN hmi);
 MMRESULT  midiInStop(  HMIDIIN hmi);
 MMRESULT  midiInReset(  HMIDIIN hmi);
 MMRESULT  midiInGetID(  HMIDIIN hmi,  LPUINT puDeviceID);
 MMRESULT  midiInMessage(  HMIDIIN hmi,  UINT uMsg,  DWORD_PTR dw1,  DWORD_PTR dw2);
typedef struct tagAUXCAPSA {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    CHAR        szPname[32];
    WORD        wTechnology;
    WORD        wReserved1;
    DWORD       dwSupport;
} AUXCAPSA, *PAUXCAPSA, *NPAUXCAPSA, *LPAUXCAPSA;
typedef struct tagAUXCAPSW {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    WCHAR       szPname[32];
    WORD        wTechnology;
    WORD        wReserved1;
    DWORD       dwSupport;
} AUXCAPSW, *PAUXCAPSW, *NPAUXCAPSW, *LPAUXCAPSW;
typedef AUXCAPSA AUXCAPS;
typedef PAUXCAPSA PAUXCAPS;
typedef NPAUXCAPSA NPAUXCAPS;
typedef LPAUXCAPSA LPAUXCAPS;
typedef struct tagAUXCAPS2A {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    CHAR        szPname[32];
    WORD        wTechnology;
    WORD        wReserved1;
    DWORD       dwSupport;
    GUID        ManufacturerGuid;
    GUID        ProductGuid;
    GUID        NameGuid;
} AUXCAPS2A, *PAUXCAPS2A, *NPAUXCAPS2A, *LPAUXCAPS2A;
typedef struct tagAUXCAPS2W {
    WORD        wMid;
    WORD        wPid;
    MMVERSION   vDriverVersion;
    WCHAR       szPname[32];
    WORD        wTechnology;
    WORD        wReserved1;
    DWORD       dwSupport;
    GUID        ManufacturerGuid;
    GUID        ProductGuid;
    GUID        NameGuid;
} AUXCAPS2W, *PAUXCAPS2W, *NPAUXCAPS2W, *LPAUXCAPS2W;
typedef AUXCAPS2A AUXCAPS2;
typedef PAUXCAPS2A PAUXCAPS2;
typedef NPAUXCAPS2A NPAUXCAPS2;
typedef LPAUXCAPS2A LPAUXCAPS2;
 UINT  auxGetNumDevs(void);
 MMRESULT  auxGetDevCapsA(  UINT_PTR uDeviceID,  LPAUXCAPSA pac,  UINT cbac);
 MMRESULT  auxGetDevCapsW(  UINT_PTR uDeviceID,  LPAUXCAPSW pac,  UINT cbac);
 MMRESULT  auxSetVolume(  UINT uDeviceID,  DWORD dwVolume);
 MMRESULT  auxGetVolume(  UINT uDeviceID,  LPDWORD pdwVolume);
 MMRESULT  auxOutMessage(  UINT uDeviceID,  UINT uMsg,  DWORD_PTR dw1,  DWORD_PTR dw2);
struct HMIXEROBJ__ { int unused; }; typedef struct HMIXEROBJ__ *HMIXEROBJ;
typedef HMIXEROBJ  *LPHMIXEROBJ;
struct HMIXER__ { int unused; }; typedef struct HMIXER__ *HMIXER;
typedef HMIXER      *LPHMIXER;
 UINT  mixerGetNumDevs(void);
typedef struct tagMIXERCAPSA {
    WORD            wMid;
    WORD            wPid;
    MMVERSION       vDriverVersion;
    CHAR            szPname[32];
    DWORD           fdwSupport;
    DWORD           cDestinations;
} MIXERCAPSA, *PMIXERCAPSA, *LPMIXERCAPSA;
typedef struct tagMIXERCAPSW {
    WORD            wMid;
    WORD            wPid;
    MMVERSION       vDriverVersion;
    WCHAR           szPname[32];
    DWORD           fdwSupport;
    DWORD           cDestinations;
} MIXERCAPSW, *PMIXERCAPSW, *LPMIXERCAPSW;
typedef MIXERCAPSA MIXERCAPS;
typedef PMIXERCAPSA PMIXERCAPS;
typedef LPMIXERCAPSA LPMIXERCAPS;
typedef struct tagMIXERCAPS2A {
    WORD            wMid;
    WORD            wPid;
    MMVERSION       vDriverVersion;
    CHAR            szPname[32];
    DWORD           fdwSupport;
    DWORD           cDestinations;
    GUID            ManufacturerGuid;
    GUID            ProductGuid;
    GUID            NameGuid;
} MIXERCAPS2A, *PMIXERCAPS2A, *LPMIXERCAPS2A;
typedef struct tagMIXERCAPS2W {
    WORD            wMid;
    WORD            wPid;
    MMVERSION       vDriverVersion;
    WCHAR           szPname[32];
    DWORD           fdwSupport;
    DWORD           cDestinations;
    GUID            ManufacturerGuid;
    GUID            ProductGuid;
    GUID            NameGuid;
} MIXERCAPS2W, *PMIXERCAPS2W, *LPMIXERCAPS2W;
typedef MIXERCAPS2A MIXERCAPS2;
typedef PMIXERCAPS2A PMIXERCAPS2;
typedef LPMIXERCAPS2A LPMIXERCAPS2;
 MMRESULT  mixerGetDevCapsA(  UINT_PTR uMxId,  LPMIXERCAPSA pmxcaps,  UINT cbmxcaps);
 MMRESULT  mixerGetDevCapsW(  UINT_PTR uMxId,  LPMIXERCAPSW pmxcaps,  UINT cbmxcaps);
 MMRESULT  mixerOpen(  LPHMIXER phmx,  UINT uMxId,  DWORD_PTR dwCallback,  DWORD_PTR dwInstance,  DWORD fdwOpen);
 MMRESULT  mixerClose(  HMIXER hmx);
 DWORD  mixerMessage(  HMIXER hmx,  UINT uMsg,  DWORD_PTR dwParam1,  DWORD_PTR dwParam2);
typedef struct tagMIXERLINEA {
    DWORD       cbStruct;
    DWORD       dwDestination;
    DWORD       dwSource;
    DWORD       dwLineID;
    DWORD       fdwLine;
    DWORD_PTR   dwUser;
    DWORD       dwComponentType;
    DWORD       cChannels;
    DWORD       cConnections;
    DWORD       cControls;
    CHAR        szShortName[16];
    CHAR        szName[64];
    struct {
        DWORD       dwType;
        DWORD       dwDeviceID;
        WORD        wMid;
        WORD        wPid;
        MMVERSION   vDriverVersion;
        CHAR        szPname[32];
    } Target;
} MIXERLINEA, *PMIXERLINEA, *LPMIXERLINEA;
typedef struct tagMIXERLINEW {
    DWORD       cbStruct;
    DWORD       dwDestination;
    DWORD       dwSource;
    DWORD       dwLineID;
    DWORD       fdwLine;
    DWORD_PTR   dwUser;
    DWORD       dwComponentType;
    DWORD       cChannels;
    DWORD       cConnections;
    DWORD       cControls;
    WCHAR       szShortName[16];
    WCHAR       szName[64];
    struct {
        DWORD       dwType;
        DWORD       dwDeviceID;
        WORD        wMid;
        WORD        wPid;
        MMVERSION   vDriverVersion;
        WCHAR       szPname[32];
    } Target;
} MIXERLINEW, *PMIXERLINEW, *LPMIXERLINEW;
typedef MIXERLINEA MIXERLINE;
typedef PMIXERLINEA PMIXERLINE;
typedef LPMIXERLINEA LPMIXERLINE;
 MMRESULT  mixerGetLineInfoA(  HMIXEROBJ hmxobj,  LPMIXERLINEA pmxl,  DWORD fdwInfo);
 MMRESULT  mixerGetLineInfoW(  HMIXEROBJ hmxobj,  LPMIXERLINEW pmxl,  DWORD fdwInfo);
 MMRESULT  mixerGetID(  HMIXEROBJ hmxobj,  UINT  *puMxId,  DWORD fdwId);
typedef struct tagMIXERCONTROLA {
    DWORD           cbStruct;
    DWORD           dwControlID;
    DWORD           dwControlType;
    DWORD           fdwControl;
    DWORD           cMultipleItems;
    CHAR            szShortName[16];
    CHAR            szName[64];
    union {
        struct {
            LONG    lMinimum;
            LONG    lMaximum;
        };
        struct {
            DWORD   dwMinimum;
            DWORD   dwMaximum;
        };
        DWORD       dwReserved[6];
    } Bounds;
    union {
        DWORD       cSteps;
        DWORD       cbCustomData;
        DWORD       dwReserved[6];
    } Metrics;
} MIXERCONTROLA, *PMIXERCONTROLA, *LPMIXERCONTROLA;
typedef struct tagMIXERCONTROLW {
    DWORD           cbStruct;
    DWORD           dwControlID;
    DWORD           dwControlType;
    DWORD           fdwControl;
    DWORD           cMultipleItems;
    WCHAR           szShortName[16];
    WCHAR           szName[64];
    union {
        struct {
            LONG    lMinimum;
            LONG    lMaximum;
        };
        struct {
            DWORD   dwMinimum;
            DWORD   dwMaximum;
        };
        DWORD       dwReserved[6];
    } Bounds;
    union {
        DWORD       cSteps;
        DWORD       cbCustomData;
        DWORD       dwReserved[6];
    } Metrics;
} MIXERCONTROLW, *PMIXERCONTROLW, *LPMIXERCONTROLW;
typedef MIXERCONTROLA MIXERCONTROL;
typedef PMIXERCONTROLA PMIXERCONTROL;
typedef LPMIXERCONTROLA LPMIXERCONTROL;
typedef struct tagMIXERLINECONTROLSA {
    DWORD           cbStruct;
    DWORD           dwLineID;
    union {
        DWORD       dwControlID;
        DWORD       dwControlType;
    };
    DWORD           cControls;
    DWORD           cbmxctrl;
    LPMIXERCONTROLA pamxctrl;
} MIXERLINECONTROLSA, *PMIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
typedef struct tagMIXERLINECONTROLSW {
    DWORD           cbStruct;
    DWORD           dwLineID;
    union {
        DWORD       dwControlID;
        DWORD       dwControlType;
    };
    DWORD           cControls;
    DWORD           cbmxctrl;
    LPMIXERCONTROLW pamxctrl;
} MIXERLINECONTROLSW, *PMIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
typedef MIXERLINECONTROLSA MIXERLINECONTROLS;
typedef PMIXERLINECONTROLSA PMIXERLINECONTROLS;
typedef LPMIXERLINECONTROLSA LPMIXERLINECONTROLS;
 MMRESULT  mixerGetLineControlsA(  HMIXEROBJ hmxobj,  LPMIXERLINECONTROLSA pmxlc,  DWORD fdwControls);
 MMRESULT  mixerGetLineControlsW(  HMIXEROBJ hmxobj,  LPMIXERLINECONTROLSW pmxlc,  DWORD fdwControls);
typedef struct tMIXERCONTROLDETAILS {
    DWORD           cbStruct;
    DWORD           dwControlID;
    DWORD           cChannels;
    union {
        HWND        hwndOwner;
        DWORD       cMultipleItems;
    };
    DWORD           cbDetails;
    LPVOID          paDetails;
} MIXERCONTROLDETAILS, *PMIXERCONTROLDETAILS,  *LPMIXERCONTROLDETAILS;
typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
    DWORD           dwParam1;
    DWORD           dwParam2;
    CHAR            szName[64];
} MIXERCONTROLDETAILS_LISTTEXTA, *PMIXERCONTROLDETAILS_LISTTEXTA, *LPMIXERCONTROLDETAILS_LISTTEXTA;
typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
    DWORD           dwParam1;
    DWORD           dwParam2;
    WCHAR           szName[64];
} MIXERCONTROLDETAILS_LISTTEXTW, *PMIXERCONTROLDETAILS_LISTTEXTW, *LPMIXERCONTROLDETAILS_LISTTEXTW;
typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT;
typedef PMIXERCONTROLDETAILS_LISTTEXTA PMIXERCONTROLDETAILS_LISTTEXT;
typedef LPMIXERCONTROLDETAILS_LISTTEXTA LPMIXERCONTROLDETAILS_LISTTEXT;
typedef struct tMIXERCONTROLDETAILS_BOOLEAN {
    LONG            fValue;
}       MIXERCONTROLDETAILS_BOOLEAN,
      *PMIXERCONTROLDETAILS_BOOLEAN,
  *LPMIXERCONTROLDETAILS_BOOLEAN;
typedef struct tMIXERCONTROLDETAILS_SIGNED {
    LONG            lValue;
}       MIXERCONTROLDETAILS_SIGNED,
      *PMIXERCONTROLDETAILS_SIGNED,
  *LPMIXERCONTROLDETAILS_SIGNED;
typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
    DWORD           dwValue;
}       MIXERCONTROLDETAILS_UNSIGNED,
      *PMIXERCONTROLDETAILS_UNSIGNED,
  *LPMIXERCONTROLDETAILS_UNSIGNED;
 MMRESULT  mixerGetControlDetailsA(  HMIXEROBJ hmxobj,  LPMIXERCONTROLDETAILS pmxcd,  DWORD fdwDetails);
 MMRESULT  mixerGetControlDetailsW(  HMIXEROBJ hmxobj,  LPMIXERCONTROLDETAILS pmxcd,  DWORD fdwDetails);
 MMRESULT  mixerSetControlDetails(  HMIXEROBJ hmxobj,  LPMIXERCONTROLDETAILS pmxcd,  DWORD fdwDetails);
typedef void ( TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2);
typedef TIMECALLBACK  *LPTIMECALLBACK;
typedef struct timecaps_tag {
    UINT    wPeriodMin;
    UINT    wPeriodMax;
} TIMECAPS, *PTIMECAPS,  *NPTIMECAPS,  *LPTIMECAPS;
 MMRESULT  timeGetSystemTime(  LPMMTIME pmmt,  UINT cbmmt);
 DWORD  timeGetTime(void);
 MMRESULT  timeSetEvent(  UINT uDelay,  UINT uResolution,
     LPTIMECALLBACK fptc,  DWORD_PTR dwUser,  UINT fuEvent);
 MMRESULT  timeKillEvent(  UINT uTimerID);
 MMRESULT  timeGetDevCaps(  LPTIMECAPS ptc,  UINT cbtc);
 MMRESULT  timeBeginPeriod(  UINT uPeriod);
 MMRESULT  timeEndPeriod(  UINT uPeriod);
typedef struct tagJOYCAPSA {
    WORD    wMid;
    WORD    wPid;
    CHAR    szPname[32];
    UINT    wXmin;
    UINT    wXmax;
    UINT    wYmin;
    UINT    wYmax;
    UINT    wZmin;
    UINT    wZmax;
    UINT    wNumButtons;
    UINT    wPeriodMin;
    UINT    wPeriodMax;
    UINT    wRmin;
    UINT    wRmax;
    UINT    wUmin;
    UINT    wUmax;
    UINT    wVmin;
    UINT    wVmax;
    UINT    wCaps;
    UINT    wMaxAxes;
    UINT    wNumAxes;
    UINT    wMaxButtons;
    CHAR    szRegKey[32];
    CHAR    szOEMVxD[260];
} JOYCAPSA, *PJOYCAPSA, *NPJOYCAPSA, *LPJOYCAPSA;
typedef struct tagJOYCAPSW {
    WORD    wMid;
    WORD    wPid;
    WCHAR   szPname[32];
    UINT    wXmin;
    UINT    wXmax;
    UINT    wYmin;
    UINT    wYmax;
    UINT    wZmin;
    UINT    wZmax;
    UINT    wNumButtons;
    UINT    wPeriodMin;
    UINT    wPeriodMax;
    UINT    wRmin;
    UINT    wRmax;
    UINT    wUmin;
    UINT    wUmax;
    UINT    wVmin;
    UINT    wVmax;
    UINT    wCaps;
    UINT    wMaxAxes;
    UINT    wNumAxes;
    UINT    wMaxButtons;
    WCHAR   szRegKey[32];
    WCHAR   szOEMVxD[260];
} JOYCAPSW, *PJOYCAPSW, *NPJOYCAPSW, *LPJOYCAPSW;
typedef JOYCAPSA JOYCAPS;
typedef PJOYCAPSA PJOYCAPS;
typedef NPJOYCAPSA NPJOYCAPS;
typedef LPJOYCAPSA LPJOYCAPS;
typedef struct tagJOYCAPS2A {
    WORD    wMid;
    WORD    wPid;
    CHAR    szPname[32];
    UINT    wXmin;
    UINT    wXmax;
    UINT    wYmin;
    UINT    wYmax;
    UINT    wZmin;
    UINT    wZmax;
    UINT    wNumButtons;
    UINT    wPeriodMin;
    UINT    wPeriodMax;
    UINT    wRmin;
    UINT    wRmax;
    UINT    wUmin;
    UINT    wUmax;
    UINT    wVmin;
    UINT    wVmax;
    UINT    wCaps;
    UINT    wMaxAxes;
    UINT    wNumAxes;
    UINT    wMaxButtons;
    CHAR    szRegKey[32];
    CHAR    szOEMVxD[260];
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} JOYCAPS2A, *PJOYCAPS2A, *NPJOYCAPS2A, *LPJOYCAPS2A;
typedef struct tagJOYCAPS2W {
    WORD    wMid;
    WORD    wPid;
    WCHAR   szPname[32];
    UINT    wXmin;
    UINT    wXmax;
    UINT    wYmin;
    UINT    wYmax;
    UINT    wZmin;
    UINT    wZmax;
    UINT    wNumButtons;
    UINT    wPeriodMin;
    UINT    wPeriodMax;
    UINT    wRmin;
    UINT    wRmax;
    UINT    wUmin;
    UINT    wUmax;
    UINT    wVmin;
    UINT    wVmax;
    UINT    wCaps;
    UINT    wMaxAxes;
    UINT    wNumAxes;
    UINT    wMaxButtons;
    WCHAR   szRegKey[32];
    WCHAR   szOEMVxD[260];
    GUID    ManufacturerGuid;
    GUID    ProductGuid;
    GUID    NameGuid;
} JOYCAPS2W, *PJOYCAPS2W, *NPJOYCAPS2W, *LPJOYCAPS2W;
typedef JOYCAPS2A JOYCAPS2;
typedef PJOYCAPS2A PJOYCAPS2;
typedef NPJOYCAPS2A NPJOYCAPS2;
typedef LPJOYCAPS2A LPJOYCAPS2;
typedef struct joyinfo_tag {
    UINT wXpos;
    UINT wYpos;
    UINT wZpos;
    UINT wButtons;
} JOYINFO, *PJOYINFO,  *NPJOYINFO,  *LPJOYINFO;
typedef struct joyinfoex_tag {
    DWORD dwSize;
    DWORD dwFlags;
    DWORD dwXpos;
    DWORD dwYpos;
    DWORD dwZpos;
    DWORD dwRpos;
    DWORD dwUpos;
    DWORD dwVpos;
    DWORD dwButtons;
    DWORD dwButtonNumber;
    DWORD dwPOV;
    DWORD dwReserved1;
    DWORD dwReserved2;
} JOYINFOEX, *PJOYINFOEX,  *NPJOYINFOEX,  *LPJOYINFOEX;
 UINT  joyGetNumDevs(void);
 MMRESULT  joyGetDevCapsA(  UINT_PTR uJoyID,  LPJOYCAPSA pjc,  UINT cbjc);
 MMRESULT  joyGetDevCapsW(  UINT_PTR uJoyID,  LPJOYCAPSW pjc,  UINT cbjc);
 MMRESULT  joyGetPos(  UINT uJoyID,  LPJOYINFO pji);
 MMRESULT  joyGetPosEx(  UINT uJoyID,  LPJOYINFOEX pji);
 MMRESULT  joyGetThreshold(  UINT uJoyID,  LPUINT puThreshold);
 MMRESULT  joyReleaseCapture(  UINT uJoyID);
 MMRESULT  joySetCapture(  HWND hwnd,  UINT uJoyID,  UINT uPeriod,
     BOOL fChanged);
 MMRESULT  joySetThreshold(  UINT uJoyID,  UINT uThreshold);
typedef DWORD           FOURCC;
typedef char  *    HPSTR;
struct HMMIO__ { int unused; }; typedef struct HMMIO__ *HMMIO;
typedef LRESULT ( MMIOPROC)(LPSTR lpmmioinfo, UINT uMsg,
            LPARAM lParam1, LPARAM lParam2);
typedef MMIOPROC  *LPMMIOPROC;
typedef struct _MMIOINFO
{
        DWORD           dwFlags;
        FOURCC          fccIOProc;
        LPMMIOPROC      pIOProc;
        UINT            wErrorRet;
        HTASK           htask;
        LONG            cchBuffer;
        HPSTR           pchBuffer;
        HPSTR           pchNext;
        HPSTR           pchEndRead;
        HPSTR           pchEndWrite;
        LONG            lBufOffset;
        LONG            lDiskOffset;
        DWORD           adwInfo[3];
        DWORD           dwReserved1;
        DWORD           dwReserved2;
        HMMIO           hmmio;
} MMIOINFO, *PMMIOINFO,  *NPMMIOINFO,  *LPMMIOINFO;
typedef const MMIOINFO  *LPCMMIOINFO;
typedef struct _MMCKINFO
{
        FOURCC          ckid;
        DWORD           cksize;
        FOURCC          fccType;
        DWORD           dwDataOffset;
        DWORD           dwFlags;
} MMCKINFO, *PMMCKINFO,  *NPMMCKINFO,  *LPMMCKINFO;
typedef const MMCKINFO *LPCMMCKINFO;
 FOURCC  mmioStringToFOURCCA( LPCSTR sz,  UINT uFlags);
 FOURCC  mmioStringToFOURCCW( LPCWSTR sz,  UINT uFlags);
 LPMMIOPROC  mmioInstallIOProcA(  FOURCC fccIOProc,  LPMMIOPROC pIOProc,  DWORD dwFlags);
 LPMMIOPROC  mmioInstallIOProcW(  FOURCC fccIOProc,  LPMMIOPROC pIOProc,  DWORD dwFlags);
  HMMIO  mmioOpenA(  LPSTR pszFileName,   LPMMIOINFO pmmioinfo,   DWORD fdwOpen);
  HMMIO  mmioOpenW(  LPWSTR pszFileName,   LPMMIOINFO pmmioinfo,   DWORD fdwOpen);
 MMRESULT  mmioRenameA(  LPCSTR pszFileName,  LPCSTR pszNewFileName,  LPCMMIOINFO pmmioinfo,  DWORD fdwRename);
 MMRESULT  mmioRenameW(  LPCWSTR pszFileName,  LPCWSTR pszNewFileName,  LPCMMIOINFO pmmioinfo,  DWORD fdwRename);
 MMRESULT  mmioClose(  HMMIO hmmio,  UINT fuClose);
 LONG  mmioRead(  HMMIO hmmio,  HPSTR pch,  LONG cch);
 LONG  mmioWrite(  HMMIO hmmio,  const char * pch,  LONG cch);
 LONG  mmioSeek(  HMMIO hmmio,  LONG lOffset,  int iOrigin);
 MMRESULT  mmioGetInfo(  HMMIO hmmio,  LPMMIOINFO pmmioinfo,  UINT fuInfo);
 MMRESULT  mmioSetInfo(  HMMIO hmmio,  LPCMMIOINFO pmmioinfo,  UINT fuInfo);
 MMRESULT  mmioSetBuffer(  HMMIO hmmio,  LPSTR pchBuffer,  LONG cchBuffer,
     UINT fuBuffer);
 MMRESULT  mmioFlush(  HMMIO hmmio,  UINT fuFlush);
 MMRESULT  mmioAdvance(  HMMIO hmmio,  LPMMIOINFO pmmioinfo,  UINT fuAdvance);
 LRESULT  mmioSendMessage(  HMMIO hmmio,  UINT uMsg,
     LPARAM lParam1,  LPARAM lParam2);
 MMRESULT  mmioDescend(  HMMIO hmmio,  LPMMCKINFO pmmcki,
     const MMCKINFO * pmmckiParent,  UINT fuDescend);
 MMRESULT  mmioAscend(  HMMIO hmmio,  LPMMCKINFO pmmcki,  UINT fuAscend);
 MMRESULT  mmioCreateChunk( HMMIO hmmio,  LPMMCKINFO pmmcki,  UINT fuCreate);
typedef DWORD   MCIERROR;
typedef UINT    MCIDEVICEID;
typedef UINT ( *YIELDPROC)(MCIDEVICEID mciId, DWORD dwYieldData);
 MCIERROR  mciSendCommandA(  MCIDEVICEID mciId,  UINT uMsg,  DWORD_PTR dwParam1,  DWORD_PTR dwParam2);
 MCIERROR  mciSendCommandW(  MCIDEVICEID mciId,  UINT uMsg,  DWORD_PTR dwParam1,  DWORD_PTR dwParam2);
 MCIERROR   mciSendStringA(  LPCSTR lpstrCommand,  LPSTR lpstrReturnString,  UINT uReturnLength,  HWND hwndCallback);
 MCIERROR   mciSendStringW(  LPCWSTR lpstrCommand,  LPWSTR lpstrReturnString,  UINT uReturnLength,  HWND hwndCallback);
 MCIDEVICEID  mciGetDeviceIDA(  LPCSTR pszDevice);
 MCIDEVICEID  mciGetDeviceIDW(  LPCWSTR pszDevice);
 MCIDEVICEID  mciGetDeviceIDFromElementIDA(  DWORD dwElementID,  LPCSTR lpstrType );
 MCIDEVICEID  mciGetDeviceIDFromElementIDW(  DWORD dwElementID,  LPCWSTR lpstrType );
 BOOL  mciGetErrorStringA(  MCIERROR mcierr,  LPSTR pszText,  UINT cchText);
 BOOL  mciGetErrorStringW(  MCIERROR mcierr,  LPWSTR pszText,  UINT cchText);
 BOOL  mciSetYieldProc(  MCIDEVICEID mciId,  YIELDPROC fpYieldProc,
     DWORD dwYieldData);
 HTASK  mciGetCreatorTask(  MCIDEVICEID mciId);
 YIELDPROC  mciGetYieldProc(  MCIDEVICEID mciId,  LPDWORD pdwYieldData);
typedef struct tagMCI_GENERIC_PARMS {
    DWORD_PTR   dwCallback;
} MCI_GENERIC_PARMS, *PMCI_GENERIC_PARMS,  *LPMCI_GENERIC_PARMS;
typedef struct tagMCI_OPEN_PARMSA {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCSTR     lpstrDeviceType;
    LPCSTR     lpstrElementName;
    LPCSTR     lpstrAlias;
} MCI_OPEN_PARMSA, *PMCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
typedef struct tagMCI_OPEN_PARMSW {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCWSTR    lpstrDeviceType;
    LPCWSTR    lpstrElementName;
    LPCWSTR    lpstrAlias;
} MCI_OPEN_PARMSW, *PMCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS;
typedef PMCI_OPEN_PARMSA PMCI_OPEN_PARMS;
typedef LPMCI_OPEN_PARMSA LPMCI_OPEN_PARMS;
typedef struct tagMCI_PLAY_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrom;
    DWORD       dwTo;
} MCI_PLAY_PARMS, *PMCI_PLAY_PARMS,  *LPMCI_PLAY_PARMS;
typedef struct tagMCI_SEEK_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwTo;
} MCI_SEEK_PARMS, *PMCI_SEEK_PARMS,  *LPMCI_SEEK_PARMS;
typedef struct tagMCI_STATUS_PARMS {
    DWORD_PTR   dwCallback;
    DWORD_PTR   dwReturn;
    DWORD       dwItem;
    DWORD       dwTrack;
} MCI_STATUS_PARMS, *PMCI_STATUS_PARMS,  * LPMCI_STATUS_PARMS;
typedef struct tagMCI_INFO_PARMSA {
    DWORD_PTR dwCallback;
    LPSTR     lpstrReturn;
    DWORD     dwRetSize;
} MCI_INFO_PARMSA, * LPMCI_INFO_PARMSA;
typedef struct tagMCI_INFO_PARMSW {
    DWORD_PTR dwCallback;
    LPWSTR    lpstrReturn;
    DWORD     dwRetSize;
} MCI_INFO_PARMSW, * LPMCI_INFO_PARMSW;
typedef MCI_INFO_PARMSA MCI_INFO_PARMS;
typedef LPMCI_INFO_PARMSA LPMCI_INFO_PARMS;
typedef struct tagMCI_GETDEVCAPS_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwReturn;
    DWORD       dwItem;
} MCI_GETDEVCAPS_PARMS, *PMCI_GETDEVCAPS_PARMS,  * LPMCI_GETDEVCAPS_PARMS;
typedef struct tagMCI_SYSINFO_PARMSA {
    DWORD_PTR   dwCallback;
    LPSTR       lpstrReturn;
    DWORD       dwRetSize;
    DWORD       dwNumber;
    UINT        wDeviceType;
} MCI_SYSINFO_PARMSA, *PMCI_SYSINFO_PARMSA, * LPMCI_SYSINFO_PARMSA;
typedef struct tagMCI_SYSINFO_PARMSW {
    DWORD_PTR   dwCallback;
    LPWSTR      lpstrReturn;
    DWORD       dwRetSize;
    DWORD       dwNumber;
    UINT        wDeviceType;
} MCI_SYSINFO_PARMSW, *PMCI_SYSINFO_PARMSW, * LPMCI_SYSINFO_PARMSW;
typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS;
typedef PMCI_SYSINFO_PARMSA PMCI_SYSINFO_PARMS;
typedef LPMCI_SYSINFO_PARMSA LPMCI_SYSINFO_PARMS;
typedef struct tagMCI_SET_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwTimeFormat;
    DWORD       dwAudio;
} MCI_SET_PARMS, *PMCI_SET_PARMS,  *LPMCI_SET_PARMS;
typedef struct tagMCI_BREAK_PARMS {
    DWORD_PTR   dwCallback;
    int         nVirtKey;
    HWND        hwndBreak;
} MCI_BREAK_PARMS, *PMCI_BREAK_PARMS,  * LPMCI_BREAK_PARMS;
typedef struct tagMCI_SAVE_PARMSA {
    DWORD_PTR    dwCallback;
    LPCSTR       lpfilename;
} MCI_SAVE_PARMSA, *PMCI_SAVE_PARMSA, * LPMCI_SAVE_PARMSA;
typedef struct tagMCI_SAVE_PARMSW {
    DWORD_PTR    dwCallback;
    LPCWSTR      lpfilename;
} MCI_SAVE_PARMSW, *PMCI_SAVE_PARMSW, * LPMCI_SAVE_PARMSW;
typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS;
typedef PMCI_SAVE_PARMSA PMCI_SAVE_PARMS;
typedef LPMCI_SAVE_PARMSA LPMCI_SAVE_PARMS;
typedef struct tagMCI_LOAD_PARMSA {
    DWORD_PTR    dwCallback;
    LPCSTR       lpfilename;
} MCI_LOAD_PARMSA, *PMCI_LOAD_PARMSA, * LPMCI_LOAD_PARMSA;
typedef struct tagMCI_LOAD_PARMSW {
    DWORD_PTR    dwCallback;
    LPCWSTR      lpfilename;
} MCI_LOAD_PARMSW, *PMCI_LOAD_PARMSW, * LPMCI_LOAD_PARMSW;
typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS;
typedef PMCI_LOAD_PARMSA PMCI_LOAD_PARMS;
typedef LPMCI_LOAD_PARMSA LPMCI_LOAD_PARMS;
typedef struct tagMCI_RECORD_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrom;
    DWORD       dwTo;
} MCI_RECORD_PARMS,  *LPMCI_RECORD_PARMS;
typedef struct tagMCI_VD_PLAY_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrom;
    DWORD       dwTo;
    DWORD       dwSpeed;
} MCI_VD_PLAY_PARMS, *PMCI_VD_PLAY_PARMS,  *LPMCI_VD_PLAY_PARMS;
typedef struct tagMCI_VD_STEP_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrames;
} MCI_VD_STEP_PARMS, *PMCI_VD_STEP_PARMS,  *LPMCI_VD_STEP_PARMS;
typedef struct tagMCI_VD_ESCAPE_PARMSA {
    DWORD_PTR   dwCallback;
    LPCSTR      lpstrCommand;
} MCI_VD_ESCAPE_PARMSA, *PMCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
typedef struct tagMCI_VD_ESCAPE_PARMSW {
    DWORD_PTR   dwCallback;
    LPCWSTR     lpstrCommand;
} MCI_VD_ESCAPE_PARMSW, *PMCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS;
typedef PMCI_VD_ESCAPE_PARMSA PMCI_VD_ESCAPE_PARMS;
typedef LPMCI_VD_ESCAPE_PARMSA LPMCI_VD_ESCAPE_PARMS;
typedef struct tagMCI_WAVE_OPEN_PARMSA {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCSTR     lpstrDeviceType;
    LPCSTR     lpstrElementName;
    LPCSTR     lpstrAlias;
    DWORD   dwBufferSeconds;
} MCI_WAVE_OPEN_PARMSA, *PMCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
typedef struct tagMCI_WAVE_OPEN_PARMSW {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCWSTR    lpstrDeviceType;
    LPCWSTR    lpstrElementName;
    LPCWSTR    lpstrAlias;
    DWORD   dwBufferSeconds;
} MCI_WAVE_OPEN_PARMSW, *PMCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS;
typedef PMCI_WAVE_OPEN_PARMSA PMCI_WAVE_OPEN_PARMS;
typedef LPMCI_WAVE_OPEN_PARMSA LPMCI_WAVE_OPEN_PARMS;
typedef struct tagMCI_WAVE_DELETE_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrom;
    DWORD       dwTo;
} MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS,  *LPMCI_WAVE_DELETE_PARMS;
typedef struct tagMCI_WAVE_SET_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwTimeFormat;
    DWORD       dwAudio;
    UINT    wInput;
    UINT    wOutput;
    WORD    wFormatTag;
    WORD    wReserved2;
    WORD    nChannels;
    WORD    wReserved3;
    DWORD   nSamplesPerSec;
    DWORD   nAvgBytesPerSec;
    WORD    nBlockAlign;
    WORD    wReserved4;
    WORD    wBitsPerSample;
    WORD    wReserved5;
} MCI_WAVE_SET_PARMS, *PMCI_WAVE_SET_PARMS,  * LPMCI_WAVE_SET_PARMS;
typedef struct tagMCI_SEQ_SET_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwTimeFormat;
    DWORD       dwAudio;
    DWORD       dwTempo;
    DWORD       dwPort;
    DWORD       dwSlave;
    DWORD       dwMaster;
    DWORD       dwOffset;
} MCI_SEQ_SET_PARMS, *PMCI_SEQ_SET_PARMS,  * LPMCI_SEQ_SET_PARMS;
typedef struct tagMCI_ANIM_OPEN_PARMSA {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCSTR      lpstrDeviceType;
    LPCSTR      lpstrElementName;
    LPCSTR      lpstrAlias;
    DWORD   dwStyle;
    HWND    hWndParent;
} MCI_ANIM_OPEN_PARMSA, *PMCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
typedef struct tagMCI_ANIM_OPEN_PARMSW {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCWSTR     lpstrDeviceType;
    LPCWSTR     lpstrElementName;
    LPCWSTR     lpstrAlias;
    DWORD   dwStyle;
    HWND    hWndParent;
} MCI_ANIM_OPEN_PARMSW, *PMCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS;
typedef PMCI_ANIM_OPEN_PARMSA PMCI_ANIM_OPEN_PARMS;
typedef LPMCI_ANIM_OPEN_PARMSA LPMCI_ANIM_OPEN_PARMS;
typedef struct tagMCI_ANIM_PLAY_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrom;
    DWORD       dwTo;
    DWORD       dwSpeed;
} MCI_ANIM_PLAY_PARMS, *PMCI_ANIM_PLAY_PARMS,  *LPMCI_ANIM_PLAY_PARMS;
typedef struct tagMCI_ANIM_STEP_PARMS {
    DWORD_PTR   dwCallback;
    DWORD       dwFrames;
} MCI_ANIM_STEP_PARMS, *PMCI_ANIM_STEP_PARMS,  *LPMCI_ANIM_STEP_PARMS;
typedef struct tagMCI_ANIM_WINDOW_PARMSA {
    DWORD_PTR   dwCallback;
    HWND        hWnd;
    UINT        nCmdShow;
    LPCSTR     lpstrText;
} MCI_ANIM_WINDOW_PARMSA, *PMCI_ANIM_WINDOW_PARMSA, * LPMCI_ANIM_WINDOW_PARMSA;
typedef struct tagMCI_ANIM_WINDOW_PARMSW {
    DWORD_PTR   dwCallback;
    HWND        hWnd;
    UINT        nCmdShow;
    LPCWSTR    lpstrText;
} MCI_ANIM_WINDOW_PARMSW, *PMCI_ANIM_WINDOW_PARMSW, * LPMCI_ANIM_WINDOW_PARMSW;
typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS;
typedef PMCI_ANIM_WINDOW_PARMSA PMCI_ANIM_WINDOW_PARMS;
typedef LPMCI_ANIM_WINDOW_PARMSA LPMCI_ANIM_WINDOW_PARMS;
typedef struct tagMCI_ANIM_RECT_PARMS {
    DWORD_PTR   dwCallback;
    RECT    rc;
} MCI_ANIM_RECT_PARMS;
typedef MCI_ANIM_RECT_PARMS * PMCI_ANIM_RECT_PARMS;
typedef MCI_ANIM_RECT_PARMS  * LPMCI_ANIM_RECT_PARMS;
typedef struct tagMCI_ANIM_UPDATE_PARMS {
    DWORD_PTR   dwCallback;
    RECT        rc;
    HDC         hDC;
} MCI_ANIM_UPDATE_PARMS, *PMCI_ANIM_UPDATE_PARMS,  * LPMCI_ANIM_UPDATE_PARMS;
typedef struct tagMCI_OVLY_OPEN_PARMSA {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCSTR      lpstrDeviceType;
    LPCSTR      lpstrElementName;
    LPCSTR      lpstrAlias;
    DWORD   dwStyle;
    HWND    hWndParent;
} MCI_OVLY_OPEN_PARMSA, *PMCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
typedef struct tagMCI_OVLY_OPEN_PARMSW {
    DWORD_PTR   dwCallback;
    MCIDEVICEID wDeviceID;
    LPCWSTR     lpstrDeviceType;
    LPCWSTR     lpstrElementName;
    LPCWSTR     lpstrAlias;
    DWORD   dwStyle;
    HWND    hWndParent;
} MCI_OVLY_OPEN_PARMSW, *PMCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS;
typedef PMCI_OVLY_OPEN_PARMSA PMCI_OVLY_OPEN_PARMS;
typedef LPMCI_OVLY_OPEN_PARMSA LPMCI_OVLY_OPEN_PARMS;
typedef struct tagMCI_OVLY_WINDOW_PARMSA {
    DWORD_PTR   dwCallback;
    HWND        hWnd;
    UINT        nCmdShow;
    LPCSTR      lpstrText;
} MCI_OVLY_WINDOW_PARMSA, *PMCI_OVLY_WINDOW_PARMSA, * LPMCI_OVLY_WINDOW_PARMSA;
typedef struct tagMCI_OVLY_WINDOW_PARMSW {
    DWORD_PTR   dwCallback;
    HWND        hWnd;
    UINT        nCmdShow;
    LPCWSTR     lpstrText;
} MCI_OVLY_WINDOW_PARMSW, *PMCI_OVLY_WINDOW_PARMSW, * LPMCI_OVLY_WINDOW_PARMSW;
typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS;
typedef PMCI_OVLY_WINDOW_PARMSA PMCI_OVLY_WINDOW_PARMS;
typedef LPMCI_OVLY_WINDOW_PARMSA LPMCI_OVLY_WINDOW_PARMS;
typedef struct tagMCI_OVLY_RECT_PARMS {
    DWORD_PTR   dwCallback;
    RECT    rc;
} MCI_OVLY_RECT_PARMS, *PMCI_OVLY_RECT_PARMS,  * LPMCI_OVLY_RECT_PARMS;
typedef struct tagMCI_OVLY_SAVE_PARMSA {
    DWORD_PTR   dwCallback;
    LPCSTR      lpfilename;
    RECT        rc;
} MCI_OVLY_SAVE_PARMSA, *PMCI_OVLY_SAVE_PARMSA, * LPMCI_OVLY_SAVE_PARMSA;
typedef struct tagMCI_OVLY_SAVE_PARMSW {
    DWORD_PTR   dwCallback;
    LPCWSTR     lpfilename;
    RECT        rc;
} MCI_OVLY_SAVE_PARMSW, *PMCI_OVLY_SAVE_PARMSW, * LPMCI_OVLY_SAVE_PARMSW;
typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS;
typedef PMCI_OVLY_SAVE_PARMSA PMCI_OVLY_SAVE_PARMS;
typedef LPMCI_OVLY_SAVE_PARMSA LPMCI_OVLY_SAVE_PARMS;
typedef struct tagMCI_OVLY_LOAD_PARMSA {
    DWORD_PTR   dwCallback;
    LPCSTR      lpfilename;
    RECT    rc;
} MCI_OVLY_LOAD_PARMSA, *PMCI_OVLY_LOAD_PARMSA, * LPMCI_OVLY_LOAD_PARMSA;
typedef struct tagMCI_OVLY_LOAD_PARMSW {
    DWORD_PTR   dwCallback;
    LPCWSTR     lpfilename;
    RECT    rc;
} MCI_OVLY_LOAD_PARMSW, *PMCI_OVLY_LOAD_PARMSW, * LPMCI_OVLY_LOAD_PARMSW;
typedef MCI_OVLY_LOAD_PARMSA MCI_OVLY_LOAD_PARMS;
typedef PMCI_OVLY_LOAD_PARMSA PMCI_OVLY_LOAD_PARMS;
typedef LPMCI_OVLY_LOAD_PARMSA LPMCI_OVLY_LOAD_PARMS;
typedef struct _NCB {
    UCHAR   ncb_command;
    UCHAR   ncb_retcode;
    UCHAR   ncb_lsn;
    UCHAR   ncb_num;
    PUCHAR  ncb_buffer;
    WORD    ncb_length;
    UCHAR   ncb_callname[16];
    UCHAR   ncb_name[16];
    UCHAR   ncb_rto;
    UCHAR   ncb_sto;
    void ( *ncb_post)( struct _NCB * );
    UCHAR   ncb_lana_num;
    UCHAR   ncb_cmd_cplt;
    UCHAR   ncb_reserve[10];
    HANDLE  ncb_event;
} NCB, *PNCB;
typedef struct _ADAPTER_STATUS {
    UCHAR   adapter_address[6];
    UCHAR   rev_major;
    UCHAR   reserved0;
    UCHAR   adapter_type;
    UCHAR   rev_minor;
    WORD    duration;
    WORD    frmr_recv;
    WORD    frmr_xmit;
    WORD    iframe_recv_err;
    WORD    xmit_aborts;
    DWORD   xmit_success;
    DWORD   recv_success;
    WORD    iframe_xmit_err;
    WORD    recv_buff_unavail;
    WORD    t1_timeouts;
    WORD    ti_timeouts;
    DWORD   reserved1;
    WORD    free_ncbs;
    WORD    max_cfg_ncbs;
    WORD    max_ncbs;
    WORD    xmit_buf_unavail;
    WORD    max_dgram_size;
    WORD    pending_sess;
    WORD    max_cfg_sess;
    WORD    max_sess;
    WORD    max_sess_pkt_size;
    WORD    name_count;
} ADAPTER_STATUS, *PADAPTER_STATUS;
typedef struct _NAME_BUFFER {
    UCHAR   name[16];
    UCHAR   name_num;
    UCHAR   name_flags;
} NAME_BUFFER, *PNAME_BUFFER;
typedef struct _SESSION_HEADER {
    UCHAR   sess_name;
    UCHAR   num_sess;
    UCHAR   rcv_dg_outstanding;
    UCHAR   rcv_any_outstanding;
} SESSION_HEADER, *PSESSION_HEADER;
typedef struct _SESSION_BUFFER {
    UCHAR   lsn;
    UCHAR   state;
    UCHAR   local_name[16];
    UCHAR   remote_name[16];
    UCHAR   rcvs_outstanding;
    UCHAR   sends_outstanding;
} SESSION_BUFFER, *PSESSION_BUFFER;
typedef struct _LANA_ENUM {
    UCHAR   length;
    UCHAR   lana[254+1];
} LANA_ENUM, *PLANA_ENUM;
typedef struct _FIND_NAME_HEADER {
    WORD    node_count;
    UCHAR   reserved;
    UCHAR   unique_group;
} FIND_NAME_HEADER, *PFIND_NAME_HEADER;
typedef struct _FIND_NAME_BUFFER {
    UCHAR   length;
    UCHAR   access_control;
    UCHAR   frame_control;
    UCHAR   destination_addr[6];
    UCHAR   source_addr[6];
    UCHAR   routing_info[18];
} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER;
typedef struct _ACTION_HEADER {
    ULONG   transport_id;
    USHORT  action_code;
    USHORT  reserved;
} ACTION_HEADER, *PACTION_HEADER;
UCHAR

Netbios(
    PNCB pncb
    );
typedef void * I_RPC_HANDLE;
typedef long RPC_STATUS;
typedef  unsigned char  * RPC_CSTR;
typedef  unsigned short  * RPC_WSTR;
typedef I_RPC_HANDLE RPC_BINDING_HANDLE;
typedef RPC_BINDING_HANDLE handle_t;
typedef GUID UUID;
typedef struct _RPC_BINDING_VECTOR
{
    unsigned long Count;
    RPC_BINDING_HANDLE BindingH[1];
} RPC_BINDING_VECTOR;
typedef struct _UUID_VECTOR
{
  unsigned long Count;
  UUID *Uuid[1];
} UUID_VECTOR;
typedef void  * RPC_IF_HANDLE;
typedef struct _RPC_IF_ID
{
    UUID Uuid;
    unsigned short VersMajor;
    unsigned short VersMinor;
} RPC_IF_ID;
typedef struct _RPC_PROTSEQ_VECTORA
{
    unsigned int Count;
    unsigned char  * Protseq[1];
} RPC_PROTSEQ_VECTORA;
typedef struct _RPC_PROTSEQ_VECTORW
{
    unsigned int Count;
    unsigned short  * Protseq[1];
} RPC_PROTSEQ_VECTORW;
typedef struct _RPC_POLICY {
    unsigned int Length ;
    unsigned long EndpointFlags ;
    unsigned long NICFlags ;
    } RPC_POLICY,   *PRPC_POLICY ;
typedef void
RPC_OBJECT_INQ_FN (
     UUID  * ObjectUuid,
     UUID  * TypeUuid,
     RPC_STATUS  * Status
    );
typedef RPC_STATUS
RPC_IF_CALLBACK_FN (
     RPC_IF_HANDLE  InterfaceUuid,
     void *Context
    ) ;
typedef void
RPC_SECURITY_CALLBACK_FN (
     void *Context
    ) ;
typedef struct
{
    unsigned int Count;
    unsigned long Stats[1];
} RPC_STATS_VECTOR;
typedef struct
{
  unsigned long Count;
  RPC_IF_ID  * IfId[1];
} RPC_IF_ID_VECTOR;

RPC_STATUS

RpcBindingCopy (
     RPC_BINDING_HANDLE SourceBinding,
     RPC_BINDING_HANDLE  * DestinationBinding
    );

RPC_STATUS

RpcBindingFree (
      RPC_BINDING_HANDLE  * Binding
    );

RPC_STATUS

RpcBindingSetOption (
     RPC_BINDING_HANDLE hBinding,
     unsigned long      option,
     ULONG_PTR          optionValue
    );

RPC_STATUS

RpcBindingInqOption (
      RPC_BINDING_HANDLE hBinding,
      unsigned long      option,
     ULONG_PTR         *pOptionValue
    );

RPC_STATUS

RpcBindingFromStringBindingA (
     RPC_CSTR StringBinding,
     RPC_BINDING_HANDLE  * Binding
    );

RPC_STATUS

RpcBindingFromStringBindingW (
     RPC_WSTR StringBinding,
     RPC_BINDING_HANDLE  * Binding
    );

RPC_STATUS

RpcSsGetContextBinding (
     void *ContextHandle,
     RPC_BINDING_HANDLE  * Binding
    );

RPC_STATUS

RpcBindingInqObject (
     RPC_BINDING_HANDLE Binding,
     UUID  * ObjectUuid
    );

RPC_STATUS

RpcBindingReset (
     RPC_BINDING_HANDLE Binding
    );

RPC_STATUS

RpcBindingSetObject (
     RPC_BINDING_HANDLE Binding,
     UUID  * ObjectUuid
    );

RPC_STATUS

RpcMgmtInqDefaultProtectLevel (
      unsigned long AuthnSvc,
     unsigned long  *AuthnLevel
    );

RPC_STATUS

RpcBindingToStringBindingA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR  * StringBinding
    );

RPC_STATUS

RpcBindingToStringBindingW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR  * StringBinding
    );

RPC_STATUS

RpcBindingVectorFree (
     RPC_BINDING_VECTOR  *  * BindingVector
    );

RPC_STATUS

RpcStringBindingComposeA (
     RPC_CSTR ObjUuid,
     RPC_CSTR ProtSeq,
     RPC_CSTR NetworkAddr,
     RPC_CSTR Endpoint,
     RPC_CSTR Options,
     RPC_CSTR  * StringBinding
    );

RPC_STATUS

RpcStringBindingComposeW (
     RPC_WSTR ObjUuid,
     RPC_WSTR ProtSeq,
     RPC_WSTR NetworkAddr,
     RPC_WSTR Endpoint,
     RPC_WSTR Options,
     RPC_WSTR  * StringBinding
    );

RPC_STATUS

RpcStringBindingParseA (
     RPC_CSTR StringBinding,
     RPC_CSTR  * ObjUuid,
     RPC_CSTR  * Protseq,
     RPC_CSTR  * NetworkAddr,
     RPC_CSTR  * Endpoint,
     RPC_CSTR  * NetworkOptions
    );

RPC_STATUS

RpcStringBindingParseW (
     RPC_WSTR StringBinding,
     RPC_WSTR  * ObjUuid,
     RPC_WSTR  * Protseq,
     RPC_WSTR  * NetworkAddr,
     RPC_WSTR  * Endpoint,
     RPC_WSTR  * NetworkOptions
    );

RPC_STATUS

RpcStringFreeA (
     RPC_CSTR  * String
    );

RPC_STATUS

RpcStringFreeW (
     RPC_WSTR  * String
    );

RPC_STATUS

RpcIfInqId (
     RPC_IF_HANDLE RpcIfHandle,
     RPC_IF_ID  * RpcIfId
    );

RPC_STATUS

RpcNetworkIsProtseqValidA (
     RPC_CSTR Protseq
    );

RPC_STATUS

RpcNetworkIsProtseqValidW (
     RPC_WSTR Protseq
    );

RPC_STATUS

RpcMgmtInqComTimeout (
     RPC_BINDING_HANDLE Binding,
     unsigned int  * Timeout
    );

RPC_STATUS

RpcMgmtSetComTimeout (
     RPC_BINDING_HANDLE Binding,
     unsigned int Timeout
    );

RPC_STATUS

RpcMgmtSetCancelTimeout(
     long Timeout
    );

RPC_STATUS

RpcNetworkInqProtseqsA (
     RPC_PROTSEQ_VECTORA  *  * ProtseqVector
    );

RPC_STATUS

RpcNetworkInqProtseqsW (
     RPC_PROTSEQ_VECTORW  *  * ProtseqVector
    );

RPC_STATUS

RpcObjectInqType (
     UUID  * ObjUuid,
      UUID  * TypeUuid
    );

RPC_STATUS

RpcObjectSetInqFn (
     RPC_OBJECT_INQ_FN  * InquiryFn
    );

RPC_STATUS

RpcObjectSetType (
     UUID  * ObjUuid,
      UUID  * TypeUuid
    );

RPC_STATUS

RpcProtseqVectorFreeA (
     RPC_PROTSEQ_VECTORA  *  * ProtseqVector
    );

RPC_STATUS

RpcProtseqVectorFreeW (
     RPC_PROTSEQ_VECTORW  *  * ProtseqVector
    );

RPC_STATUS

RpcServerInqBindings (
     RPC_BINDING_VECTOR  *  * BindingVector
    );

RPC_STATUS

RpcServerInqIf (
     RPC_IF_HANDLE IfSpec,
     UUID  * MgrTypeUuid,
     void  *  * MgrEpv
    );

RPC_STATUS

RpcServerListen (
     unsigned int MinimumCallThreads,
     unsigned int MaxCalls,
     unsigned int DontWait
    );

RPC_STATUS

RpcServerRegisterIf (
     RPC_IF_HANDLE IfSpec,
     UUID  * MgrTypeUuid,
     void  * MgrEpv
    );

RPC_STATUS

RpcServerRegisterIfEx (
     RPC_IF_HANDLE IfSpec,
     UUID  * MgrTypeUuid,
     void  * MgrEpv,
     unsigned int Flags,
     unsigned int MaxCalls,
     RPC_IF_CALLBACK_FN  *IfCallback
    );

RPC_STATUS

RpcServerRegisterIf2 (
     RPC_IF_HANDLE IfSpec,
     UUID * MgrTypeUuid,
     void * MgrEpv,
     unsigned int Flags,
     unsigned int MaxCalls,
     unsigned int MaxRpcSize,
     RPC_IF_CALLBACK_FN *IfCallbackFn
    );

RPC_STATUS

RpcServerUnregisterIf (
     RPC_IF_HANDLE IfSpec,
     UUID  * MgrTypeUuid,
     unsigned int WaitForCallsToComplete
    );

RPC_STATUS

RpcServerUnregisterIfEx (
     RPC_IF_HANDLE IfSpec,
     UUID  * MgrTypeUuid,
     int RundownContextHandles
    );

RPC_STATUS

RpcServerUseAllProtseqs (
     unsigned int MaxCalls,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseAllProtseqsEx (
     unsigned int MaxCalls,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseAllProtseqsIf (
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseAllProtseqsIfEx (
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqExA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqExW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqEpA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     RPC_CSTR Endpoint,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqEpExA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     RPC_CSTR Endpoint,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqEpW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     RPC_WSTR Endpoint,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqEpExW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     RPC_WSTR Endpoint,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqIfA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqIfExA (
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

RPC_STATUS

RpcServerUseProtseqIfW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor
    );

RPC_STATUS

RpcServerUseProtseqIfExW (
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     RPC_IF_HANDLE IfSpec,
     void  * SecurityDescriptor,
     PRPC_POLICY Policy
    );

void

RpcServerYield (
    void
    );

RPC_STATUS

RpcMgmtStatsVectorFree (
     RPC_STATS_VECTOR ** StatsVector
    );

RPC_STATUS

RpcMgmtInqStats (
     RPC_BINDING_HANDLE Binding,
     RPC_STATS_VECTOR ** Statistics
    );

RPC_STATUS

RpcMgmtIsServerListening (
     RPC_BINDING_HANDLE Binding
    );

RPC_STATUS

RpcMgmtStopServerListening (
     RPC_BINDING_HANDLE Binding
    );

RPC_STATUS

RpcMgmtWaitServerListen (
    void
    );

RPC_STATUS

RpcMgmtSetServerStackSize (
     unsigned long ThreadStackSize
    );

void

RpcSsDontSerializeContext (
    void
    );

RPC_STATUS

RpcMgmtEnableIdleCleanup (
    void
    );

RPC_STATUS

RpcMgmtInqIfIds (
     RPC_BINDING_HANDLE Binding,
     RPC_IF_ID_VECTOR  *  * IfIdVector
    );

RPC_STATUS

RpcIfIdVectorFree (
     RPC_IF_ID_VECTOR  *  * IfIdVector
    );

RPC_STATUS

RpcMgmtInqServerPrincNameA (
     RPC_BINDING_HANDLE Binding,
     unsigned long AuthnSvc,
     RPC_CSTR  * ServerPrincName
    );

RPC_STATUS

RpcMgmtInqServerPrincNameW (
     RPC_BINDING_HANDLE Binding,
     unsigned long AuthnSvc,
     RPC_WSTR  * ServerPrincName
    );

RPC_STATUS

RpcServerInqDefaultPrincNameA (
     unsigned long AuthnSvc,
     RPC_CSTR  * PrincName
    );

RPC_STATUS

RpcServerInqDefaultPrincNameW (
     unsigned long AuthnSvc,
     RPC_WSTR  * PrincName
    );

RPC_STATUS

RpcEpResolveBinding (
     RPC_BINDING_HANDLE Binding,
     RPC_IF_HANDLE IfSpec
    );

RPC_STATUS

RpcNsBindingInqEntryNameA (
     RPC_BINDING_HANDLE Binding,
     unsigned long EntryNameSyntax,
     RPC_CSTR  * EntryName
    );

RPC_STATUS

RpcNsBindingInqEntryNameW (
     RPC_BINDING_HANDLE Binding,
     unsigned long EntryNameSyntax,
     RPC_WSTR  * EntryName
    );
typedef void  * RPC_AUTH_IDENTITY_HANDLE;
typedef void  * RPC_AUTHZ_HANDLE;
typedef struct _RPC_SECURITY_QOS {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;
typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
   unsigned short  *User;
  unsigned long UserLength;
   unsigned short  *Domain;
  unsigned long DomainLength;
   unsigned short  *Password;
  unsigned long PasswordLength;
  unsigned long Flags;
} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
typedef struct _SEC_WINNT_AUTH_IDENTITY_A {
   unsigned char  *User;
  unsigned long UserLength;
   unsigned char  *Domain;
  unsigned long DomainLength;
   unsigned char  *Password;
  unsigned long PasswordLength;
  unsigned long Flags;
} SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A;
typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_W
{
    SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials;
    unsigned long Flags;
    unsigned long AuthenticationTarget;
    unsigned long NumberOfAuthnSchemes;
    unsigned long *AuthnSchemes;
    unsigned short  *ServerCertificateSubject;
} RPC_HTTP_TRANSPORT_CREDENTIALS_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_W;
typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_A
{
    SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;
    unsigned long Flags;
    unsigned long AuthenticationTarget;
    unsigned long NumberOfAuthnSchemes;
    unsigned long *AuthnSchemes;
    unsigned char  *ServerCertificateSubject;
} RPC_HTTP_TRANSPORT_CREDENTIALS_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_A;
typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_V2_W
{
    SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials;
    unsigned long Flags;
    unsigned long AuthenticationTarget;
    unsigned long NumberOfAuthnSchemes;
     unsigned long *AuthnSchemes;
    unsigned short  *ServerCertificateSubject;
    SEC_WINNT_AUTH_IDENTITY_W *ProxyCredentials;
    unsigned long NumberOfProxyAuthnSchemes;
     unsigned long *ProxyAuthnSchemes;
} RPC_HTTP_TRANSPORT_CREDENTIALS_V2_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_V2_W;
typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A
{
    SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;
    unsigned long Flags;
    unsigned long AuthenticationTarget;
    unsigned long NumberOfAuthnSchemes;
    unsigned long *AuthnSchemes;
    unsigned char  *ServerCertificateSubject;
    SEC_WINNT_AUTH_IDENTITY_A *ProxyCredentials;
    unsigned long NumberOfProxyAuthnSchemes;
    unsigned long *ProxyAuthnSchemes;
} RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_V2_A;
typedef struct _RPC_SECURITY_QOS_V2_W {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;
      } u;
} RPC_SECURITY_QOS_V2_W, *PRPC_SECURITY_QOS_V2_W;
typedef struct _RPC_SECURITY_QOS_V2_A {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
      } u;
} RPC_SECURITY_QOS_V2_A, *PRPC_SECURITY_QOS_V2_A;
typedef struct _RPC_SECURITY_QOS_V3_W {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;
      } u;
  void *Sid;
} RPC_SECURITY_QOS_V3_W, *PRPC_SECURITY_QOS_V3_W;
typedef struct _RPC_SECURITY_QOS_V3_A {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
      } u;
  void *Sid;
} RPC_SECURITY_QOS_V3_A, *PRPC_SECURITY_QOS_V3_A;
typedef struct _RPC_SECURITY_QOS_V4_W {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;
      } u;
  void *Sid;
  unsigned int EffectiveOnly;
} RPC_SECURITY_QOS_V4_W, *PRPC_SECURITY_QOS_V4_W;
typedef struct _RPC_SECURITY_QOS_V4_A {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
  unsigned long AdditionalSecurityInfoType;
  union
      {
      RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
      } u;
  void *Sid;
  unsigned int EffectiveOnly;
} RPC_SECURITY_QOS_V4_A, *PRPC_SECURITY_QOS_V4_A;
typedef struct _RPC_BINDING_HANDLE_TEMPLATE_V1_W {
    unsigned long Version;
    unsigned long Flags;
    unsigned long ProtocolSequence;
    unsigned short *NetworkAddress;
    unsigned short *StringEndpoint;
    union
    {
        unsigned short *Reserved;
    } u1;
    UUID ObjectUuid;
} RPC_BINDING_HANDLE_TEMPLATE_V1_W, *PRPC_BINDING_HANDLE_TEMPLATE_V1_W;
typedef struct _RPC_BINDING_HANDLE_TEMPLATE_V1_A {
    unsigned long Version;
    unsigned long Flags;
    unsigned long ProtocolSequence;
    unsigned char *NetworkAddress;
    unsigned char *StringEndpoint;
    union
    {
        unsigned char *Reserved;
    } u1;
    UUID ObjectUuid;
} RPC_BINDING_HANDLE_TEMPLATE_V1_A, *PRPC_BINDING_HANDLE_TEMPLATE_V1_A;
typedef struct _RPC_BINDING_HANDLE_SECURITY_V1_W {
    unsigned long Version;
    unsigned short *ServerPrincName;
    unsigned long AuthnLevel;
    unsigned long AuthnSvc;
    SEC_WINNT_AUTH_IDENTITY_W *AuthIdentity;
    RPC_SECURITY_QOS *SecurityQos;
} RPC_BINDING_HANDLE_SECURITY_V1_W, *PRPC_BINDING_HANDLE_SECURITY_V1_W;
typedef struct _RPC_BINDING_HANDLE_SECURITY_V1_A {
    unsigned long Version;
    unsigned char *ServerPrincName;
    unsigned long AuthnLevel;
    unsigned long AuthnSvc;
    SEC_WINNT_AUTH_IDENTITY_A *AuthIdentity;
    RPC_SECURITY_QOS *SecurityQos;
} RPC_BINDING_HANDLE_SECURITY_V1_A, *PRPC_BINDING_HANDLE_SECURITY_V1_A;
typedef struct _RPC_BINDING_HANDLE_OPTIONS_V1 {
    unsigned long Version;
    unsigned long Flags;
    unsigned long ComTimeout;
    unsigned long CallTimeout;
} RPC_BINDING_HANDLE_OPTIONS_V1, *PRPC_BINDING_HANDLE_OPTIONS_V1;

RPC_STATUS

RpcBindingCreateA (
     RPC_BINDING_HANDLE_TEMPLATE_V1_A * Template,
     RPC_BINDING_HANDLE_SECURITY_V1_A * Security,
     RPC_BINDING_HANDLE_OPTIONS_V1 * Options,
     RPC_BINDING_HANDLE * Binding
    );

RPC_STATUS

RpcBindingCreateW (
     RPC_BINDING_HANDLE_TEMPLATE_V1_W * Template,
     RPC_BINDING_HANDLE_SECURITY_V1_W * Security,
     RPC_BINDING_HANDLE_OPTIONS_V1 * Options,
     RPC_BINDING_HANDLE * Binding
    );

RPC_STATUS

RpcBindingGetTrainingContextHandle (
     RPC_BINDING_HANDLE Binding,
     void ** ContextHandle
    );

RPC_STATUS

RpcServerInqBindingHandle (
     RPC_BINDING_HANDLE * Binding
    );
typedef enum _RPC_HTTP_REDIRECTOR_STAGE
{
    RPCHTTP_RS_REDIRECT = 1,
    RPCHTTP_RS_ACCESS_1,
    RPCHTTP_RS_SESSION,
    RPCHTTP_RS_ACCESS_2,
    RPCHTTP_RS_INTERFACE
} RPC_HTTP_REDIRECTOR_STAGE;
typedef RPC_STATUS
( * RPC_NEW_HTTP_PROXY_CHANNEL) (
     RPC_HTTP_REDIRECTOR_STAGE RedirectorStage,
     RPC_WSTR ServerName,
     RPC_WSTR ServerPort,
     RPC_WSTR RemoteUser,
     RPC_WSTR AuthType,
     void  * ResourceUuid,
     void  * Metadata,
     void  * SessionId,
     void  * Interface,
     void  * Reserved,
     unsigned long Flags,
     RPC_WSTR  * NewServerName,
     RPC_WSTR  * NewServerPort
    );
typedef void
( * RPC_HTTP_PROXY_FREE_STRING) (
     RPC_WSTR String
    );

RPC_STATUS

RpcImpersonateClient (
     RPC_BINDING_HANDLE BindingHandle
    );

RPC_STATUS

RpcRevertToSelfEx (
     RPC_BINDING_HANDLE BindingHandle
    );

RPC_STATUS

RpcRevertToSelf (
    void
    );

RPC_STATUS

RpcBindingInqAuthClientA (
     RPC_BINDING_HANDLE ClientBinding,
     RPC_AUTHZ_HANDLE  * Privs,
     RPC_CSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     unsigned long  * AuthzSvc
    );

RPC_STATUS

RpcBindingInqAuthClientW (
     RPC_BINDING_HANDLE ClientBinding,
     RPC_AUTHZ_HANDLE  * Privs,
     RPC_WSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     unsigned long  * AuthzSvc
    );

RPC_STATUS

RpcBindingInqAuthClientExA (
     RPC_BINDING_HANDLE ClientBinding,
     RPC_AUTHZ_HANDLE  * Privs,
     RPC_CSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     unsigned long  * AuthzSvc,
      unsigned long             Flags
    );

RPC_STATUS

RpcBindingInqAuthClientExW (
     RPC_BINDING_HANDLE ClientBinding,
     RPC_AUTHZ_HANDLE  * Privs,
     RPC_WSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     unsigned long  * AuthzSvc,
      unsigned long             Flags
    );

RPC_STATUS

RpcBindingInqAuthInfoA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE  * AuthIdentity,
     unsigned long  * AuthzSvc
    );

RPC_STATUS

RpcBindingInqAuthInfoW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE  * AuthIdentity,
     unsigned long  * AuthzSvc
    );

RPC_STATUS

RpcBindingSetAuthInfoA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR ServerPrincName,
     unsigned long AuthnLevel,
     unsigned long AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
     unsigned long AuthzSvc
    );

RPC_STATUS

RpcBindingSetAuthInfoExA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR ServerPrincName,
     unsigned long AuthnLevel,
     unsigned long AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
     unsigned long AuthzSvc,
     RPC_SECURITY_QOS * SecurityQos
    );

RPC_STATUS

RpcBindingSetAuthInfoW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR ServerPrincName,
     unsigned long AuthnLevel,
     unsigned long AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
     unsigned long AuthzSvc
    );

RPC_STATUS

RpcBindingSetAuthInfoExW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR ServerPrincName,
     unsigned long AuthnLevel,
     unsigned long AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE AuthIdentity,
     unsigned long AuthzSvc,
     RPC_SECURITY_QOS * SecurityQOS
    );

RPC_STATUS

RpcBindingInqAuthInfoExA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE  * AuthIdentity,
     unsigned long  * AuthzSvc,
      unsigned long RpcQosVersion,
     RPC_SECURITY_QOS *SecurityQOS
    );

RPC_STATUS

RpcBindingInqAuthInfoExW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR  * ServerPrincName,
     unsigned long  * AuthnLevel,
     unsigned long  * AuthnSvc,
     RPC_AUTH_IDENTITY_HANDLE  * AuthIdentity,
     unsigned long  * AuthzSvc,
      unsigned long RpcQosVersion,
     RPC_SECURITY_QOS * SecurityQOS
    );
typedef void
( * RPC_AUTH_KEY_RETRIEVAL_FN) (
     void  * Arg,
     RPC_WSTR ServerPrincName,
     unsigned long KeyVer,
     void  *  * Key,
     RPC_STATUS  * Status
    );

RPC_STATUS

RpcServerCompleteSecurityCallback(
     RPC_BINDING_HANDLE BindingHandle,
     RPC_STATUS Status
    );

RPC_STATUS

RpcServerRegisterAuthInfoA (
     RPC_CSTR ServerPrincName,
     unsigned long AuthnSvc,
     RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
     void  * Arg
    );

RPC_STATUS

RpcServerRegisterAuthInfoW (
     RPC_WSTR ServerPrincName,
     unsigned long AuthnSvc,
     RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
     void  * Arg
    );
typedef struct {
    unsigned char  * UserName;
    unsigned char  * ComputerName;
    unsigned short Privilege;
    unsigned long AuthFlags;
} RPC_CLIENT_INFORMATION1,  * PRPC_CLIENT_INFORMATION1;

RPC_STATUS

RpcBindingServerFromClient (
     RPC_BINDING_HANDLE ClientBinding,
     RPC_BINDING_HANDLE  * ServerBinding
    );

__declspec(noreturn)
void

RpcRaiseException (
     RPC_STATUS exception
    );

RPC_STATUS

RpcTestCancel(
    void
    );

RPC_STATUS

RpcServerTestCancel (
     RPC_BINDING_HANDLE BindingHandle
    );

RPC_STATUS

RpcCancelThread(
     void * Thread
    );

RPC_STATUS

RpcCancelThreadEx(
     void * Thread,
     long Timeout
    );

RPC_STATUS

UuidCreate (
     UUID  * Uuid
    );

RPC_STATUS

UuidCreateSequential (
     UUID  * Uuid
    );

RPC_STATUS

UuidToStringA (
     const UUID  * Uuid,
     RPC_CSTR  * StringUuid
    );

RPC_STATUS

UuidFromStringA (
     RPC_CSTR StringUuid,
     UUID  * Uuid
    );

RPC_STATUS

UuidToStringW (
     const UUID  * Uuid,
     RPC_WSTR  * StringUuid
    );

RPC_STATUS

UuidFromStringW (
     RPC_WSTR StringUuid,
     UUID  * Uuid
    );

signed int

UuidCompare (
     UUID  * Uuid1,
     UUID  * Uuid2,
     RPC_STATUS  * Status
    );

RPC_STATUS

UuidCreateNil (
     UUID  * NilUuid
    );

int

UuidEqual (
     UUID  * Uuid1,
     UUID  * Uuid2,
     RPC_STATUS  * Status
    );

unsigned short

UuidHash (
     UUID  * Uuid,
     RPC_STATUS  * Status
    );

int

UuidIsNil (
     UUID  * Uuid,
     RPC_STATUS  * Status
    );

RPC_STATUS

RpcEpRegisterNoReplaceA (
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR * BindingVector,
     UUID_VECTOR * UuidVector,
     RPC_CSTR Annotation
    );

RPC_STATUS

RpcEpRegisterNoReplaceW (
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR * BindingVector,
     UUID_VECTOR * UuidVector,
     RPC_WSTR Annotation
    );

RPC_STATUS

RpcEpRegisterA (
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR * BindingVector,
     UUID_VECTOR * UuidVector,
     RPC_CSTR Annotation
    );

RPC_STATUS

RpcEpRegisterW (
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR * BindingVector,
     UUID_VECTOR * UuidVector,
     RPC_WSTR Annotation
    );

RPC_STATUS

RpcEpUnregister(
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR * BindingVector,
     UUID_VECTOR * UuidVector
    );

RPC_STATUS

DceErrorInqTextA (
     RPC_STATUS RpcStatus,
     RPC_CSTR ErrorText
    );

RPC_STATUS

DceErrorInqTextW (
     RPC_STATUS RpcStatus,
     RPC_WSTR ErrorText
    );
typedef I_RPC_HANDLE * RPC_EP_INQ_HANDLE;

RPC_STATUS

RpcMgmtEpEltInqBegin (
      RPC_BINDING_HANDLE EpBinding,
     unsigned long InquiryType,
     RPC_IF_ID  * IfId,
     unsigned long VersOption,
     UUID  * ObjectUuid,
     RPC_EP_INQ_HANDLE  * InquiryContext
    );

RPC_STATUS

RpcMgmtEpEltInqDone (
     RPC_EP_INQ_HANDLE  * InquiryContext
    );

RPC_STATUS

RpcMgmtEpEltInqNextA (
     RPC_EP_INQ_HANDLE InquiryContext,
     RPC_IF_ID  * IfId,
     RPC_BINDING_HANDLE  * Binding,
     UUID  * ObjectUuid,
     RPC_CSTR  * Annotation
    );

RPC_STATUS

RpcMgmtEpEltInqNextW (
     RPC_EP_INQ_HANDLE InquiryContext,
     RPC_IF_ID  * IfId,
     RPC_BINDING_HANDLE  * Binding,
     UUID  * ObjectUuid,
     RPC_WSTR  * Annotation
    );

RPC_STATUS

RpcMgmtEpUnregister (
     RPC_BINDING_HANDLE EpBinding,
     RPC_IF_ID  * IfId,
     RPC_BINDING_HANDLE Binding,
     UUID  * ObjectUuid
    );
typedef int
( * RPC_MGMT_AUTHORIZATION_FN) (
     RPC_BINDING_HANDLE ClientBinding,
     unsigned long RequestedMgmtOperation,
     RPC_STATUS  * Status
    );

RPC_STATUS

RpcMgmtSetAuthorizationFn (
     RPC_MGMT_AUTHORIZATION_FN AuthorizationFn
    );

int

RpcExceptionFilter (
     unsigned long ExceptionCode
    );
typedef struct _RPC_VERSION {
    unsigned short MajorVersion;
    unsigned short MinorVersion;
} RPC_VERSION;
typedef struct _RPC_SYNTAX_IDENTIFIER {
    GUID SyntaxGUID;
    RPC_VERSION SyntaxVersion;
} RPC_SYNTAX_IDENTIFIER,  * PRPC_SYNTAX_IDENTIFIER;
typedef struct _RPC_MESSAGE
{
    RPC_BINDING_HANDLE Handle;
    unsigned long DataRepresentation;
    void  * Buffer;
    unsigned int BufferLength;
    unsigned int ProcNum;
    PRPC_SYNTAX_IDENTIFIER TransferSyntax;
    void  * RpcInterfaceInformation;
    void  * ReservedForRuntime;
    void  * ManagerEpv;
    void  * ImportContext;
    unsigned long RpcFlags;
} RPC_MESSAGE,  * PRPC_MESSAGE;
typedef RPC_STATUS
 RPC_FORWARD_FUNCTION(
                        UUID              * InterfaceId,
                        RPC_VERSION       * InterfaceVersion,
                        UUID              * ObjectId,
                        unsigned char          * Rpcpro,
                        void  *  * ppDestEndpoint);
enum RPC_ADDRESS_CHANGE_TYPE
{
    PROTOCOL_NOT_LOADED = 1,
    PROTOCOL_LOADED,
    PROTOCOL_ADDRESS_CHANGE
};
typedef void
 RPC_ADDRESS_CHANGE_FN(
                         void * arg
                        );
typedef
void
(  * RPC_DISPATCH_FUNCTION) (
      PRPC_MESSAGE Message
    );
typedef struct {
    unsigned int DispatchTableCount;
    RPC_DISPATCH_FUNCTION  * DispatchTable;
    LONG_PTR                          Reserved;
} RPC_DISPATCH_TABLE,  * PRPC_DISPATCH_TABLE;
typedef struct _RPC_PROTSEQ_ENDPOINT
{
    unsigned char  * RpcProtocolSequence;
    unsigned char  * Endpoint;
} RPC_PROTSEQ_ENDPOINT,  * PRPC_PROTSEQ_ENDPOINT;
typedef struct _RPC_SERVER_INTERFACE
{
    unsigned int Length;
    RPC_SYNTAX_IDENTIFIER InterfaceId;
    RPC_SYNTAX_IDENTIFIER TransferSyntax;
    PRPC_DISPATCH_TABLE DispatchTable;
    unsigned int RpcProtseqEndpointCount;
    PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
    void  *DefaultManagerEpv;
    void const  *InterpreterInfo;
    unsigned int Flags ;
} RPC_SERVER_INTERFACE,  * PRPC_SERVER_INTERFACE;
typedef struct _RPC_CLIENT_INTERFACE
{
    unsigned int Length;
    RPC_SYNTAX_IDENTIFIER   InterfaceId;
    RPC_SYNTAX_IDENTIFIER   TransferSyntax;
    PRPC_DISPATCH_TABLE     DispatchTable;
    unsigned int            RpcProtseqEndpointCount;
    PRPC_PROTSEQ_ENDPOINT   RpcProtseqEndpoint;
    ULONG_PTR               Reserved;
    void const  *  InterpreterInfo;
    unsigned int Flags ;
} RPC_CLIENT_INTERFACE,  * PRPC_CLIENT_INTERFACE;

RPC_STATUS

I_RpcNegotiateTransferSyntax (
      RPC_MESSAGE  * Message
    );

RPC_STATUS

I_RpcGetBuffer (
      RPC_MESSAGE  * Message
    );

RPC_STATUS

I_RpcGetBufferWithObject (
      RPC_MESSAGE  * Message,
     UUID * ObjectUuid
    );

RPC_STATUS

I_RpcSendReceive (
      RPC_MESSAGE  * Message
    );

RPC_STATUS

I_RpcFreeBuffer (
      RPC_MESSAGE  * Message
    );

RPC_STATUS

I_RpcSend (
      PRPC_MESSAGE Message
    );

RPC_STATUS

I_RpcReceive (
      PRPC_MESSAGE Message,
     unsigned int Size
    );

RPC_STATUS

I_RpcFreePipeBuffer (
      RPC_MESSAGE  * Message
    );

RPC_STATUS

I_RpcReallocPipeBuffer (
     PRPC_MESSAGE Message,
     unsigned int NewSize
    );
typedef void * I_RPC_MUTEX;

void

I_RpcRequestMutex (
      I_RPC_MUTEX * Mutex
    );

void

I_RpcClearMutex (
     I_RPC_MUTEX Mutex
    );

void

I_RpcDeleteMutex (
     I_RPC_MUTEX Mutex
    );

void  *

I_RpcAllocate (
     unsigned int Size
    );

void

I_RpcFree (
     void  * Object
    );

void

I_RpcPauseExecution (
     unsigned long Milliseconds
    );

RPC_STATUS

I_RpcGetExtendedError (
    void
    );
typedef
void
(  * PRPC_RUNDOWN) (
    void  * AssociationContext
    );

RPC_STATUS

I_RpcMonitorAssociation (
     RPC_BINDING_HANDLE Handle,
     PRPC_RUNDOWN RundownRoutine,
     void * Context
    );

RPC_STATUS

I_RpcStopMonitorAssociation (
     RPC_BINDING_HANDLE Handle
    );

RPC_BINDING_HANDLE

I_RpcGetCurrentCallHandle(
    void
    );

RPC_STATUS

I_RpcGetAssociationContext (
     RPC_BINDING_HANDLE BindingHandle,
     void  *  * AssociationContext
    );

void *

I_RpcGetServerContextList (
     RPC_BINDING_HANDLE BindingHandle
    );

void

I_RpcSetServerContextList (
     RPC_BINDING_HANDLE BindingHandle,
     void * ServerContextList
    );

RPC_STATUS

I_RpcNsInterfaceExported (
     unsigned long EntryNameSyntax,
     unsigned short *EntryName,
     RPC_SERVER_INTERFACE * RpcInterfaceInformation
    );

RPC_STATUS

I_RpcNsInterfaceUnexported (
     unsigned long EntryNameSyntax,
     unsigned short *EntryName,
     RPC_SERVER_INTERFACE * RpcInterfaceInformation
    );

RPC_STATUS

I_RpcBindingToStaticStringBindingW (
     RPC_BINDING_HANDLE Binding,
     unsigned short **StringBinding
    );

RPC_STATUS

I_RpcBindingInqSecurityContext (
     RPC_BINDING_HANDLE Binding,
     void **SecurityContextHandle
    );

RPC_STATUS

I_RpcBindingInqSecurityContextKeyInfo (
     RPC_BINDING_HANDLE Binding,
     void *KeyInfo
    );

RPC_STATUS

I_RpcBindingInqWireIdForSnego (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR WireId
    );

RPC_STATUS

I_RpcBindingInqMarshalledTargetInfo (
     RPC_BINDING_HANDLE Binding,
     unsigned long * MarshalledTargetInfoSize,
     RPC_CSTR * MarshalledTargetInfo
    );

RPC_STATUS

I_RpcBindingInqLocalClientPID (
     RPC_BINDING_HANDLE Binding,
     unsigned long *Pid
    );

RPC_STATUS

I_RpcBindingHandleToAsyncHandle (
     RPC_BINDING_HANDLE Binding,
     void **AsyncHandle
    );

RPC_STATUS

I_RpcNsBindingSetEntryNameW (
     RPC_BINDING_HANDLE Binding,
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName
    );

RPC_STATUS

I_RpcNsBindingSetEntryNameA (
     RPC_BINDING_HANDLE Binding,
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName
    );

RPC_STATUS

I_RpcServerUseProtseqEp2A (
     RPC_CSTR NetworkAddress,
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     RPC_CSTR Endpoint,
     void  * SecurityDescriptor,
     void * Policy
    );

RPC_STATUS

I_RpcServerUseProtseqEp2W (
     RPC_WSTR NetworkAddress,
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     RPC_WSTR Endpoint,
     void  * SecurityDescriptor,
     void * Policy
    );

RPC_STATUS

I_RpcServerUseProtseq2W (
     RPC_WSTR NetworkAddress,
     RPC_WSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor,
     void * Policy
    );

RPC_STATUS

I_RpcServerUseProtseq2A (
     RPC_CSTR NetworkAddress,
     RPC_CSTR Protseq,
     unsigned int MaxCalls,
     void  * SecurityDescriptor,
     void * Policy
    );

RPC_STATUS

I_RpcServerStartService (
     RPC_WSTR Protseq,
     RPC_WSTR Endpoint,
     RPC_IF_HANDLE IfSpec
    );

RPC_STATUS

I_RpcBindingInqDynamicEndpointW (
     RPC_BINDING_HANDLE Binding,
     RPC_WSTR  *DynamicEndpoint
    );

RPC_STATUS

I_RpcBindingInqDynamicEndpointA (
     RPC_BINDING_HANDLE Binding,
     RPC_CSTR  *DynamicEndpoint
    );

RPC_STATUS

I_RpcServerCheckClientRestriction (
     RPC_BINDING_HANDLE Context
    );

RPC_STATUS

I_RpcBindingInqTransportType (
     RPC_BINDING_HANDLE Binding,
     unsigned int  * Type
    );
typedef struct _RPC_TRANSFER_SYNTAX
{
    UUID Uuid;
    unsigned short VersMajor;
    unsigned short VersMinor;
} RPC_TRANSFER_SYNTAX;

RPC_STATUS

I_RpcIfInqTransferSyntaxes (
     RPC_IF_HANDLE RpcIfHandle,
     RPC_TRANSFER_SYNTAX  * TransferSyntaxes,
     unsigned int TransferSyntaxSize,
     unsigned int  * TransferSyntaxCount
    );

RPC_STATUS

I_UuidCreate (
     UUID  * Uuid
    );

RPC_STATUS

I_RpcBindingCopy (
     RPC_BINDING_HANDLE SourceBinding,
     RPC_BINDING_HANDLE  * DestinationBinding
    );

RPC_STATUS

I_RpcBindingIsClientLocal (
      RPC_BINDING_HANDLE BindingHandle,
     unsigned int  * ClientLocalFlag
    );

RPC_STATUS

I_RpcBindingInqConnId (
     RPC_BINDING_HANDLE Binding,
     void **ConnId,
     int *pfFirstCall
    );

RPC_STATUS

I_RpcBindingCreateNP (
     RPC_WSTR ServerName,
     RPC_WSTR ServiceName,
     RPC_WSTR NetworkOptions,
     RPC_BINDING_HANDLE *Binding
    );

void

I_RpcSsDontSerializeContext (
    void
    );

RPC_STATUS

I_RpcLaunchDatagramReceiveThread(
    void  * pAddress
    );

RPC_STATUS

I_RpcServerRegisterForwardFunction (
     RPC_FORWARD_FUNCTION  * pForwardFunction
    );
RPC_ADDRESS_CHANGE_FN *
I_RpcServerInqAddressChangeFn(
    void
    );
RPC_STATUS
I_RpcServerSetAddressChangeFn(
     RPC_ADDRESS_CHANGE_FN * pAddressChangeFn
    );

RPC_STATUS

I_RpcServerInqLocalConnAddress (
     RPC_BINDING_HANDLE Binding,
      void *Buffer,
      unsigned long *BufferSize,
     unsigned long *AddressFormat
    );

RPC_STATUS

I_RpcServerInqRemoteConnAddress (
     RPC_BINDING_HANDLE Binding,
      void *Buffer,
      unsigned long *BufferSize,
     unsigned long *AddressFormat
    );

void

I_RpcSessionStrictContextHandle (
    void
    );

RPC_STATUS

I_RpcTurnOnEEInfoPropagation (
    void
    );

RPC_STATUS

I_RpcConnectionInqSockBuffSize(
   unsigned long  * RecvBuffSize,
   unsigned long  * SendBuffSize
  );

RPC_STATUS

I_RpcConnectionSetSockBuffSize(
    unsigned long RecvBuffSize,
    unsigned long SendBuffSize
   );
typedef
void
(*RPCLT_PDU_FILTER_FUNC) (
     void *Buffer,
     unsigned int BufferLength,
     int fDatagram
    );
typedef
void
(__cdecl *RPC_SETFILTER_FUNC) (
     RPCLT_PDU_FILTER_FUNC pfnFilter
    );

RPC_STATUS

I_RpcServerStartListening(
    void * hWnd
    );

RPC_STATUS

I_RpcServerStopListening(
    void
    );
typedef RPC_STATUS (*RPC_BLOCKING_FN) (
     void * hWnd,
     void * Context,
      void * hSyncEvent
    );

RPC_STATUS

I_RpcBindingSetAsync(
     RPC_BINDING_HANDLE Binding,
     RPC_BLOCKING_FN BlockingFn,
     unsigned long ServerTid
    );

RPC_STATUS

I_RpcSetThreadParams(
     int fClientFree,
      void *Context,
      void * hWndClient
    );

unsigned int

I_RpcWindowProc(
     void * hWnd,
     unsigned int Message,
     unsigned int wParam,
     unsigned long lParam
    );

RPC_STATUS

I_RpcServerUnregisterEndpointA (
     RPC_CSTR Protseq,
     RPC_CSTR Endpoint
    );

RPC_STATUS

I_RpcServerUnregisterEndpointW (
     RPC_WSTR Protseq,
     RPC_WSTR Endpoint
    );

RPC_STATUS

I_RpcServerInqTransportType(
     unsigned int  * Type
    );

long

I_RpcMapWin32Status (
     RPC_STATUS Status
    );
typedef struct _RPC_C_OPT_METADATA_DESCRIPTOR
{
    unsigned long BufferSize;
     char *Buffer;
} RPC_C_OPT_METADATA_DESCRIPTOR;
typedef struct _RDR_CALLOUT_STATE
{
    RPC_STATUS LastError;
    void *LastEEInfo;
    RPC_HTTP_REDIRECTOR_STAGE LastCalledStage;
    unsigned short *ServerName;
    unsigned short *ServerPort;
    unsigned short *RemoteUser;
    unsigned short *AuthType;
    unsigned char ResourceTypePresent;
    unsigned char MetadataPresent;
    unsigned char SessionIdPresent;
    unsigned char InterfacePresent;
    UUID ResourceType;
    RPC_C_OPT_METADATA_DESCRIPTOR Metadata;
    UUID SessionId;
    RPC_SYNTAX_IDENTIFIER Interface;
    void *CertContext;
} RDR_CALLOUT_STATE;
typedef RPC_STATUS
( *I_RpcProxyIsValidMachineFn)
        (
         char *pszMachine,
         char *pszDotMachine,
         unsigned long dwPortNumber
        );
typedef RPC_STATUS
( *I_RpcProxyGetClientAddressFn)
        (
         void *Context,
         char *Buffer,
         unsigned long *BufferLength
        );
typedef RPC_STATUS
( *I_RpcProxyGetConnectionTimeoutFn)
        (
         unsigned long *ConnectionTimeout
        );
typedef RPC_STATUS
( *I_RpcPerformCalloutFn)
    (
     void *Context,
     RDR_CALLOUT_STATE *CallOutState,
     RPC_HTTP_REDIRECTOR_STAGE Stage
    );
typedef void
( *I_RpcFreeCalloutStateFn)
    (
     RDR_CALLOUT_STATE *CallOutState
    );
typedef RPC_STATUS
( *I_RpcProxyGetClientSessionAndResourceUUID)
        (
         void *Context,
         int *SessionIdPresent,
         UUID *SessionId,
         int *ResourceIdPresent,
         UUID *ResourceId
        );
typedef RPC_STATUS
( *I_RpcProxyFilterIfFn)
    (
     void *Context,
     UUID *IfUuid,
     unsigned short IfMajorVersion,
     int *fAllow
    );
typedef struct tagI_RpcProxyCallbackInterface
{
    I_RpcProxyIsValidMachineFn IsValidMachineFn;
    I_RpcProxyGetClientAddressFn GetClientAddressFn;
    I_RpcProxyGetConnectionTimeoutFn GetConnectionTimeoutFn;
    I_RpcPerformCalloutFn PerformCalloutFn;
    I_RpcFreeCalloutStateFn FreeCalloutStateFn;
    I_RpcProxyGetClientSessionAndResourceUUID GetClientSessionAndResourceUUIDFn;
    I_RpcProxyFilterIfFn ProxyFilterIfFn;
} I_RpcProxyCallbackInterface;

RPC_STATUS

I_RpcProxyNewConnection (
     unsigned long ConnectionType,
     unsigned short *ServerAddress,
     unsigned short *ServerPort,
     unsigned short *MinConnTimeout,
     void *ConnectionParameter,
      RDR_CALLOUT_STATE *CallOutState,
     I_RpcProxyCallbackInterface *ProxyCallbackInterface
    );

RPC_STATUS

I_RpcReplyToClientWithStatus (
     void *ConnectionParameter,
     RPC_STATUS RpcStatus
    );

void

I_RpcRecordCalloutFailure (
     RPC_STATUS RpcStatus,
     RDR_CALLOUT_STATE *CallOutState,
     unsigned short *DllName
    );
typedef void  * RPC_NS_HANDLE;
 RPC_STATUS
RpcNsBindingExportA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR  *BindingVec,
     UUID_VECTOR  *ObjectUuidVec
    );
 RPC_STATUS
RpcNsBindingUnexportA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR  *ObjectUuidVec
    );
 RPC_STATUS
RpcNsBindingExportW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     RPC_BINDING_VECTOR  *BindingVec,
     UUID_VECTOR  *ObjectUuidVec
    );
 RPC_STATUS
RpcNsBindingUnexportW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR  *ObjectUuidVec
    );
RPC_STATUS
RpcNsBindingExportPnPA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR *ObjectVector
    );
RPC_STATUS
RpcNsBindingUnexportPnPA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR *ObjectVector
    );
RPC_STATUS
RpcNsBindingExportPnPW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR *ObjectVector
    );
RPC_STATUS
RpcNsBindingUnexportPnPW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID_VECTOR *ObjectVector
    );
 RPC_STATUS
RpcNsBindingLookupBeginA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID  *ObjUuid,
     unsigned long BindingMaxCount,
     RPC_NS_HANDLE  *LookupContext
    );
 RPC_STATUS
RpcNsBindingLookupBeginW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID  *ObjUuid,
     unsigned long BindingMaxCount,
     RPC_NS_HANDLE  *LookupContext
    );
 RPC_STATUS
RpcNsBindingLookupNext(
      RPC_NS_HANDLE LookupContext,
     RPC_BINDING_VECTOR  *  * BindingVec
    );
 RPC_STATUS
RpcNsBindingLookupDone(
      RPC_NS_HANDLE  * LookupContext
    );
 RPC_STATUS
RpcNsGroupDeleteA(
     unsigned long GroupNameSyntax,
     RPC_CSTR GroupName
    );
 RPC_STATUS
RpcNsGroupMbrAddA(
     unsigned long GroupNameSyntax,
     RPC_CSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_CSTR MemberName
    );
 RPC_STATUS
RpcNsGroupMbrRemoveA(
     unsigned long GroupNameSyntax,
     RPC_CSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_CSTR MemberName
    );
 RPC_STATUS
RpcNsGroupMbrInqBeginA(
     unsigned long GroupNameSyntax,
     RPC_CSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsGroupMbrInqNextA(
     RPC_NS_HANDLE InquiryContext,
     RPC_CSTR  *MemberName
    );
 RPC_STATUS
RpcNsGroupDeleteW(
     unsigned long GroupNameSyntax,
     RPC_WSTR GroupName
    );
 RPC_STATUS
RpcNsGroupMbrAddW(
     unsigned long GroupNameSyntax,
     RPC_WSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_WSTR MemberName
    );
 RPC_STATUS
RpcNsGroupMbrRemoveW(
     unsigned long GroupNameSyntax,
     RPC_WSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_WSTR MemberName
    );
 RPC_STATUS
RpcNsGroupMbrInqBeginW(
     unsigned long GroupNameSyntax,
     RPC_WSTR GroupName,
     unsigned long MemberNameSyntax,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsGroupMbrInqNextW(
     RPC_NS_HANDLE InquiryContext,
     RPC_WSTR  *MemberName
    );
 RPC_STATUS
RpcNsGroupMbrInqDone(
      RPC_NS_HANDLE  * InquiryContext
    );
 RPC_STATUS
RpcNsProfileDeleteA(
     unsigned long ProfileNameSyntax,
     RPC_CSTR ProfileName
    );
 RPC_STATUS
RpcNsProfileEltAddA(
     unsigned long ProfileNameSyntax,
     RPC_CSTR ProfileName,
     RPC_IF_ID  *IfId,
     unsigned long MemberNameSyntax,
     RPC_CSTR MemberName,
     unsigned long Priority,
     RPC_CSTR Annotation
    );
 RPC_STATUS
RpcNsProfileEltRemoveA(
     unsigned long ProfileNameSyntax,
     RPC_CSTR ProfileName,
     RPC_IF_ID  *IfId,
     unsigned long MemberNameSyntax,
     RPC_CSTR MemberName
    );
 RPC_STATUS
RpcNsProfileEltInqBeginA(
     unsigned long ProfileNameSyntax,
     RPC_CSTR ProfileName,
     unsigned long InquiryType,
     RPC_IF_ID  *IfId,
     unsigned long VersOption,
     unsigned long MemberNameSyntax,
     RPC_CSTR MemberName,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsProfileEltInqNextA(
     RPC_NS_HANDLE InquiryContext,
     RPC_IF_ID  *IfId,
     RPC_CSTR  *MemberName,
     unsigned long  *Priority,
     RPC_CSTR  *Annotation
    );
 RPC_STATUS
RpcNsProfileDeleteW(
     unsigned long ProfileNameSyntax,
     RPC_WSTR ProfileName
    );
 RPC_STATUS
RpcNsProfileEltAddW(
     unsigned long ProfileNameSyntax,
     RPC_WSTR ProfileName,
     RPC_IF_ID  *IfId,
     unsigned long MemberNameSyntax,
     RPC_WSTR MemberName,
     unsigned long Priority,
     RPC_WSTR Annotation
    );
 RPC_STATUS
RpcNsProfileEltRemoveW(
     unsigned long ProfileNameSyntax,
     RPC_WSTR ProfileName,
     RPC_IF_ID  *IfId,
     unsigned long MemberNameSyntax,
     RPC_WSTR MemberName
    );
 RPC_STATUS
RpcNsProfileEltInqBeginW(
     unsigned long ProfileNameSyntax,
     RPC_WSTR ProfileName,
     unsigned long InquiryType,
     RPC_IF_ID  *IfId,
     unsigned long VersOption,
     unsigned long MemberNameSyntax,
     RPC_WSTR MemberName,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsProfileEltInqNextW(
     RPC_NS_HANDLE InquiryContext,
     RPC_IF_ID  *IfId,
     RPC_WSTR  *MemberName,
     unsigned long  *Priority,
     RPC_WSTR  *Annotation
    );
 RPC_STATUS
RpcNsProfileEltInqDone(
      RPC_NS_HANDLE  * InquiryContext
    );
 RPC_STATUS
RpcNsEntryObjectInqBeginA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsEntryObjectInqBeginW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_NS_HANDLE  *InquiryContext
    );
 RPC_STATUS
RpcNsEntryObjectInqNext(
      RPC_NS_HANDLE InquiryContext,
     UUID  * ObjUuid
    );
 RPC_STATUS
RpcNsEntryObjectInqDone(
      RPC_NS_HANDLE  * InquiryContext
    );
 RPC_STATUS
RpcNsEntryExpandNameA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_CSTR  *ExpandedName
    );
 RPC_STATUS
RpcNsMgmtBindingUnexportA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_ID  *IfId,
     unsigned long VersOption,
     UUID_VECTOR  *ObjectUuidVec
    );
 RPC_STATUS
RpcNsMgmtEntryCreateA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName
    );
 RPC_STATUS
RpcNsMgmtEntryDeleteA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName
    );
 RPC_STATUS
RpcNsMgmtEntryInqIfIdsA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_ID_VECTOR  *  *IfIdVec
    );
 RPC_STATUS
RpcNsMgmtHandleSetExpAge(
     RPC_NS_HANDLE NsHandle,
     unsigned long ExpirationAge
    );
 RPC_STATUS
RpcNsMgmtInqExpAge(
     unsigned long  * ExpirationAge
    );
 RPC_STATUS
RpcNsMgmtSetExpAge(
     unsigned long ExpirationAge
    );
 RPC_STATUS
RpcNsEntryExpandNameW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_WSTR  *ExpandedName
    );
 RPC_STATUS
RpcNsMgmtBindingUnexportW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_ID  *IfId,
     unsigned long VersOption,
     UUID_VECTOR  *ObjectUuidVec
    );
 RPC_STATUS
RpcNsMgmtEntryCreateW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName
    );
 RPC_STATUS
RpcNsMgmtEntryDeleteW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName
    );
 RPC_STATUS
RpcNsMgmtEntryInqIfIdsW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_ID_VECTOR  *  *IfIdVec
    );
 RPC_STATUS
RpcNsBindingImportBeginA(
     unsigned long EntryNameSyntax,
     RPC_CSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID  *ObjUuid,
     RPC_NS_HANDLE  *ImportContext
    );
 RPC_STATUS
RpcNsBindingImportBeginW(
     unsigned long EntryNameSyntax,
     RPC_WSTR EntryName,
     RPC_IF_HANDLE IfSpec,
     UUID  *ObjUuid,
     RPC_NS_HANDLE  *ImportContext
    );
 RPC_STATUS
RpcNsBindingImportNext(
     RPC_NS_HANDLE ImportContext,
     RPC_BINDING_HANDLE   * Binding
    );
 RPC_STATUS
RpcNsBindingImportDone(
      RPC_NS_HANDLE  * ImportContext
    );
 RPC_STATUS
RpcNsBindingSelect(
      RPC_BINDING_VECTOR  * BindingVec,
     RPC_BINDING_HANDLE   * Binding
    );
typedef
enum _RPC_NOTIFICATION_TYPES
{
    RpcNotificationTypeNone,
    RpcNotificationTypeEvent,
    RpcNotificationTypeApc,
    RpcNotificationTypeIoc,
    RpcNotificationTypeHwnd,
    RpcNotificationTypeCallback
} RPC_NOTIFICATION_TYPES;
typedef
enum _RPC_ASYNC_EVENT {
    RpcCallComplete,
    RpcSendComplete,
    RpcReceiveComplete,
    RpcClientDisconnect,
    RpcClientCancel
    } RPC_ASYNC_EVENT;
struct _RPC_ASYNC_STATE;
typedef void
RPCNOTIFICATION_ROUTINE (
                  struct _RPC_ASYNC_STATE *pAsync,
                  void *Context,
                  RPC_ASYNC_EVENT Event);
typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
typedef union _RPC_ASYNC_NOTIFICATION_INFO {
    struct {
        PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
        HANDLE hThread;
        } APC;
    struct {
        HANDLE hIOPort;
        DWORD dwNumberOfBytesTransferred;
        DWORD_PTR dwCompletionKey;
        LPOVERLAPPED lpOverlapped;
        } IOC;
    struct {
        HWND hWnd;
        UINT Msg;
        } HWND;
    HANDLE hEvent;
    PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
} RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
typedef struct _RPC_ASYNC_STATE {
    unsigned int    Size;
    unsigned long   Signature;
    long   Lock;
    unsigned long   Flags;
    void           *StubInfo;
    void           *UserInfo;
    void           *RuntimeInfo;
    RPC_ASYNC_EVENT Event;
    RPC_NOTIFICATION_TYPES NotificationType;
    RPC_ASYNC_NOTIFICATION_INFO u;
    LONG_PTR Reserved[4];
    } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;

RPC_STATUS

RpcAsyncInitializeHandle (
     PRPC_ASYNC_STATE pAsync,
     unsigned int     Size
    );

RPC_STATUS

RpcAsyncRegisterInfo (
     PRPC_ASYNC_STATE pAsync
    ) ;

RPC_STATUS

RpcAsyncGetCallStatus (
     PRPC_ASYNC_STATE pAsync
    ) ;

RPC_STATUS

RpcAsyncCompleteCall (
     PRPC_ASYNC_STATE pAsync,
     void *Reply
    ) ;

RPC_STATUS

RpcAsyncAbortCall (
     PRPC_ASYNC_STATE pAsync,
     unsigned long ExceptionCode
    ) ;

RPC_STATUS

RpcAsyncCancelCall (
     PRPC_ASYNC_STATE pAsync,
     BOOL fAbort
    ) ;
typedef enum tagExtendedErrorParamTypes
{
    eeptAnsiString = 1,
    eeptUnicodeString,
    eeptLongVal,
    eeptShortVal,
    eeptPointerVal,
    eeptNone,
    eeptBinary
} ExtendedErrorParamTypes;
typedef struct tagBinaryParam
{
    void *Buffer;
    short Size;
} BinaryParam;
typedef struct tagRPC_EE_INFO_PARAM
{
    ExtendedErrorParamTypes ParameterType;
    union
        {
        LPSTR AnsiString;
        LPWSTR UnicodeString;
        long LVal;
        short SVal;
        ULONGLONG PVal;
        BinaryParam BVal;
        } u;
} RPC_EE_INFO_PARAM;
typedef struct tagRPC_EXTENDED_ERROR_INFO
{
    ULONG Version;
    LPWSTR ComputerName;
    ULONG ProcessID;
    union
        {
        SYSTEMTIME SystemTime;
        FILETIME FileTime;
        } u;
    ULONG GeneratingComponent;
    ULONG Status;
    USHORT DetectionLocation;
    USHORT Flags;
    int NumberOfParameters;
    RPC_EE_INFO_PARAM Parameters[4];
} RPC_EXTENDED_ERROR_INFO;
typedef struct tagRPC_ERROR_ENUM_HANDLE
{
    ULONG Signature;
    void *CurrentPos;
    void *Head;
} RPC_ERROR_ENUM_HANDLE;

RPC_STATUS

RpcErrorStartEnumeration (
     RPC_ERROR_ENUM_HANDLE *EnumHandle
    );

RPC_STATUS

RpcErrorGetNextRecord (
     RPC_ERROR_ENUM_HANDLE *EnumHandle,
     BOOL CopyStrings,
     RPC_EXTENDED_ERROR_INFO *ErrorInfo
    );

RPC_STATUS

RpcErrorEndEnumeration (
     RPC_ERROR_ENUM_HANDLE *EnumHandle
    );

RPC_STATUS

RpcErrorResetEnumeration (
     RPC_ERROR_ENUM_HANDLE *EnumHandle
    );

RPC_STATUS

RpcErrorGetNumberOfRecords (
     RPC_ERROR_ENUM_HANDLE *EnumHandle,
     int *Records
    );

RPC_STATUS

RpcErrorSaveErrorInfo (
     RPC_ERROR_ENUM_HANDLE *EnumHandle,
     PVOID *ErrorBlob,
     size_t *BlobSize
    );

RPC_STATUS

RpcErrorLoadErrorInfo (
     PVOID ErrorBlob,
     size_t BlobSize,
     RPC_ERROR_ENUM_HANDLE *EnumHandle
    );

RPC_STATUS

RpcErrorAddRecord (
     RPC_EXTENDED_ERROR_INFO *ErrorInfo
    );

void

RpcErrorClearInformation (
    void
    );

RPC_STATUS

RpcAsyncCleanupThread (
     DWORD dwTimeout
    );

RPC_STATUS

RpcGetAuthorizationContextForClient (
     RPC_BINDING_HANDLE ClientBinding,
     BOOL ImpersonateOnReturn,
     PVOID Reserved1,
     PLARGE_INTEGER pExpirationTime,
     LUID Reserved2,
     DWORD Reserved3,
     PVOID Reserved4,
     PVOID *pAuthzClientContext
    );

RPC_STATUS

RpcFreeAuthorizationContext (
     PVOID *pAuthzClientContext
    );

RPC_STATUS

RpcSsContextLockExclusive (
     RPC_BINDING_HANDLE ServerBindingHandle,
     PVOID UserContext
    );

RPC_STATUS

RpcSsContextLockShared (
     RPC_BINDING_HANDLE ServerBindingHandle,
     PVOID UserContext
    );
typedef enum tagRpcLocalAddressFormat
{
    rlafInvalid = 0,
    rlafIPv4,
    rlafIPv6
} RpcLocalAddressFormat;
typedef struct _RPC_CALL_LOCAL_ADDRESS_V1
{
    unsigned int Version;
    void *Buffer;
    unsigned long BufferSize;
    RpcLocalAddressFormat AddressFormat;
} RPC_CALL_LOCAL_ADDRESS_V1, *PRPC_CALL_LOCAL_ADDRESS_V1;
typedef struct tagRPC_CALL_ATTRIBUTES_V1_W
{
    unsigned int Version;
    unsigned long Flags;
    unsigned long ServerPrincipalNameBufferLength;
    unsigned short *ServerPrincipalName;
    unsigned long ClientPrincipalNameBufferLength;
    unsigned short *ClientPrincipalName;
    unsigned long AuthenticationLevel;
    unsigned long AuthenticationService;
    BOOL NullSession;
} RPC_CALL_ATTRIBUTES_V1_W;
typedef struct tagRPC_CALL_ATTRIBUTES_V1_A
{
    unsigned int Version;
    unsigned long Flags;
    unsigned long ServerPrincipalNameBufferLength;
    unsigned char *ServerPrincipalName;
    unsigned long ClientPrincipalNameBufferLength;
    unsigned char *ClientPrincipalName;
    unsigned long AuthenticationLevel;
    unsigned long AuthenticationService;
    BOOL NullSession;
} RPC_CALL_ATTRIBUTES_V1_A;
typedef enum tagRpcCallType
{
    rctInvalid = 0,
    rctNormal,
    rctTraining,
    rctGuaranteed
} RpcCallType;
typedef enum tagRpcCallClientLocality
{
    rcclInvalid = 0,
    rcclLocal,
    rcclRemote,
    rcclClientUnknownLocality
} RpcCallClientLocality;
typedef struct tagRPC_CALL_ATTRIBUTES_V2_W
{
    unsigned int Version;
    unsigned long Flags;
    unsigned long ServerPrincipalNameBufferLength;
    unsigned short *ServerPrincipalName;
    unsigned long ClientPrincipalNameBufferLength;
    unsigned short *ClientPrincipalName;
    unsigned long AuthenticationLevel;
    unsigned long AuthenticationService;
    BOOL NullSession;
    BOOL KernelModeCaller;
    unsigned long ProtocolSequence;
    RpcCallClientLocality IsClientLocal;
    HANDLE ClientPID;
    unsigned long CallStatus;
    RpcCallType CallType;
    RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
    unsigned short OpNum;
    UUID InterfaceUuid;
} RPC_CALL_ATTRIBUTES_V2_W;
typedef struct tagRPC_CALL_ATTRIBUTES_V2_A
{
    unsigned int Version;
    unsigned long Flags;
    unsigned long ServerPrincipalNameBufferLength;
    unsigned char *ServerPrincipalName;
    unsigned long ClientPrincipalNameBufferLength;
    unsigned char *ClientPrincipalName;
    unsigned long AuthenticationLevel;
    unsigned long AuthenticationService;
    BOOL NullSession;
    BOOL KernelModeCaller;
    unsigned long ProtocolSequence;
    unsigned long IsClientLocal;
    HANDLE ClientPID;
    unsigned long CallStatus;
    RpcCallType CallType;
    RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
    unsigned short OpNum;
    UUID InterfaceUuid;
} RPC_CALL_ATTRIBUTES_V2_A;

RPC_STATUS

RpcServerInqCallAttributesW (
     RPC_BINDING_HANDLE ClientBinding,
     void *RpcCallAttributes
    );

RPC_STATUS

RpcServerInqCallAttributesA (
     RPC_BINDING_HANDLE ClientBinding,
     void *RpcCallAttributes
    );
typedef RPC_CALL_ATTRIBUTES_V2_A RPC_CALL_ATTRIBUTES;
typedef enum _RPC_NOTIFICATIONS
{
    RpcNotificationCallNone = 0,
    RpcNotificationClientDisconnect = 1,
    RpcNotificationCallCancel = 2
} RPC_NOTIFICATIONS;

RPC_STATUS

RpcServerSubscribeForNotification (
     RPC_BINDING_HANDLE Binding,
     RPC_NOTIFICATIONS Notification,
     RPC_NOTIFICATION_TYPES NotificationType,
     RPC_ASYNC_NOTIFICATION_INFO *NotificationInfo
    );

RPC_STATUS

RpcServerUnsubscribeForNotification (
     RPC_BINDING_HANDLE Binding,
     RPC_NOTIFICATIONS Notification,
     unsigned long *NotificationsQueued
    );

RPC_STATUS

RpcBindingBind (
     PRPC_ASYNC_STATE pAsync,
     RPC_BINDING_HANDLE Binding,
     RPC_IF_HANDLE IfSpec
    );

RPC_STATUS

RpcBindingUnbind (
     RPC_BINDING_HANDLE Binding
    );

RPC_STATUS

RpcDiagnoseError (
     RPC_BINDING_HANDLE BindingHandle,
     RPC_IF_HANDLE IfSpec,
     RPC_STATUS RpcStatus,
     RPC_ERROR_ENUM_HANDLE *EnumHandle,
     ULONG Options,
     HWND ParentWindow
    );
RPC_STATUS
I_RpcAsyncSetHandle (
      PRPC_MESSAGE Message,
      PRPC_ASYNC_STATE pAsync
    );
RPC_STATUS
I_RpcAsyncAbortCall (
     PRPC_ASYNC_STATE pAsync,
     unsigned long ExceptionCode
    ) ;
int

I_RpcExceptionFilter (
     unsigned long ExceptionCode
    );
struct HDROP__ { int unused; }; typedef struct HDROP__ *HDROP;
extern  UINT  DragQueryFileA(HDROP hDrop, UINT iFile,  LPSTR lpszFile, UINT cch);
extern  UINT  DragQueryFileW(HDROP hDrop, UINT iFile,  LPWSTR lpszFile, UINT cch);
extern  BOOL  DragQueryPoint(HDROP hDrop, LPPOINT lppt);
extern  void  DragFinish( HDROP hDrop);
extern  void  DragAcceptFiles( HWND hWnd,  BOOL fAccept);
extern  HINSTANCE  ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters,
    LPCSTR lpDirectory, INT nShowCmd);
extern  HINSTANCE  ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters,
    LPCWSTR lpDirectory, INT nShowCmd);
extern  HINSTANCE  FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory,  LPSTR lpResult);
extern  HINSTANCE  FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory,  LPWSTR lpResult);
extern  LPWSTR *   CommandLineToArgvW(LPCWSTR lpCmdLine,  int* pNumArgs);
extern  INT  ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon);
extern  INT  ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon);
extern  HICON  DuplicateIcon(HINSTANCE hInst, HICON hIcon);
extern  HICON  ExtractAssociatedIconA(HINSTANCE hInst,   LPSTR lpIconPath,  LPWORD lpiIcon);
extern  HICON  ExtractAssociatedIconW(HINSTANCE hInst,   LPWSTR lpIconPath,  LPWORD lpiIcon);
extern  HICON  ExtractAssociatedIconExA(HINSTANCE hInst,  LPSTR lpIconPath,  LPWORD lpiIconIndex,  LPWORD lpiIconId);
extern  HICON  ExtractAssociatedIconExW(HINSTANCE hInst,  LPWSTR lpIconPath,  LPWORD lpiIconIndex,  LPWORD lpiIconId);
extern  HICON  ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex);
extern  HICON  ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex);
typedef struct _DRAGINFOA {
    UINT uSize;
    POINT pt;
    BOOL fNC;
    LPSTR   lpFileList;
    DWORD grfKeyState;
} DRAGINFOA, *LPDRAGINFOA;
typedef struct _DRAGINFOW {
    UINT uSize;
    POINT pt;
    BOOL fNC;
    LPWSTR  lpFileList;
    DWORD grfKeyState;
} DRAGINFOW, *LPDRAGINFOW;
typedef DRAGINFOA DRAGINFO;
typedef LPDRAGINFOA LPDRAGINFO;
typedef struct _AppBarData
{
    DWORD cbSize;
    HWND hWnd;
    UINT uCallbackMessage;
    UINT uEdge;
    RECT rc;
    LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
extern  UINT_PTR  SHAppBarMessage(DWORD dwMessage,  PAPPBARDATA pData);
extern  DWORD    DoEnvironmentSubstA( LPSTR szString, UINT cchString);
extern  DWORD    DoEnvironmentSubstW( LPWSTR szString, UINT cchString);
extern  UINT  ExtractIconExA(LPCSTR lpszFile, int nIconIndex,  HICON *phiconLarge,  HICON *phiconSmall, UINT nIcons);
extern  UINT  ExtractIconExW(LPCWSTR lpszFile, int nIconIndex,  HICON *phiconLarge,  HICON *phiconSmall, UINT nIcons);
typedef WORD FILEOP_FLAGS;
typedef WORD PRINTEROP_FLAGS;
typedef struct _SHFILEOPSTRUCTA
{
    HWND            hwnd;
    UINT            wFunc;
    LPCSTR          pFrom;
    LPCSTR          pTo;
    FILEOP_FLAGS    fFlags;
    BOOL            fAnyOperationsAborted;
    LPVOID          hNameMappings;
    LPCSTR          lpszProgressTitle;
} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
typedef struct _SHFILEOPSTRUCTW
{
    HWND            hwnd;
    UINT            wFunc;
    LPCWSTR         pFrom;
    LPCWSTR         pTo;
    FILEOP_FLAGS    fFlags;
    BOOL            fAnyOperationsAborted;
    LPVOID          hNameMappings;
    LPCWSTR         lpszProgressTitle;
} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT;
typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT;
extern  int  SHFileOperationA( LPSHFILEOPSTRUCTA lpFileOp);
extern  int  SHFileOperationW( LPSHFILEOPSTRUCTW lpFileOp);
extern  void  SHFreeNameMappings(HANDLE hNameMappings);
typedef struct _SHNAMEMAPPINGA
{
    LPSTR   pszOldPath;
    LPSTR   pszNewPath;
    int   cchOldPath;
    int   cchNewPath;
} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
typedef struct _SHNAMEMAPPINGW
{
    LPWSTR  pszOldPath;
    LPWSTR  pszNewPath;
    int   cchOldPath;
    int   cchNewPath;
} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
typedef SHNAMEMAPPINGA SHNAMEMAPPING;
typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING;
typedef struct _SHELLEXECUTEINFOA
{
        DWORD cbSize;
        ULONG fMask;
        HWND hwnd;
        LPCSTR   lpVerb;
        LPCSTR   lpFile;
        LPCSTR   lpParameters;
        LPCSTR   lpDirectory;
        int nShow;
        HINSTANCE hInstApp;
        LPVOID lpIDList;
        LPCSTR   lpClass;
        HKEY hkeyClass;
        DWORD dwHotKey;
        union {
        HANDLE hIcon;
        HANDLE hMonitor;
        } ;
        HANDLE hProcess;
} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;
typedef struct _SHELLEXECUTEINFOW
{
        DWORD cbSize;
        ULONG fMask;
        HWND hwnd;
        LPCWSTR  lpVerb;
        LPCWSTR  lpFile;
        LPCWSTR  lpParameters;
        LPCWSTR  lpDirectory;
        int nShow;
        HINSTANCE hInstApp;
        LPVOID lpIDList;
        LPCWSTR  lpClass;
        HKEY hkeyClass;
        DWORD dwHotKey;
        union {
        HANDLE hIcon;
        HANDLE hMonitor;
        } ;
        HANDLE hProcess;
} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO;
typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO;
extern  BOOL  ShellExecuteExA( LPSHELLEXECUTEINFOA lpExecInfo);
extern  BOOL  ShellExecuteExW( LPSHELLEXECUTEINFOW lpExecInfo);
typedef struct _SHCREATEPROCESSINFOW
{
        DWORD cbSize;
        ULONG fMask;
        HWND hwnd;
        LPCWSTR  pszFile;
        LPCWSTR  pszParameters;
        LPCWSTR  pszCurrentDirectory;
        HANDLE hUserToken;
        LPSECURITY_ATTRIBUTES lpProcessAttributes;
        LPSECURITY_ATTRIBUTES lpThreadAttributes;
        BOOL bInheritHandles;
        DWORD dwCreationFlags;
        LPSTARTUPINFOW lpStartupInfo;
        LPPROCESS_INFORMATION lpProcessInformation;
} SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW;
extern  BOOL  SHCreateProcessAsUserW( PSHCREATEPROCESSINFOW pscpi);
extern  HRESULT  SHEvaluateSystemCommandTemplate(PCWSTR pszCmdTemplate,  PWSTR *ppszApplication,  PWSTR *ppszCommandLine,  PWSTR *ppszParameters);
typedef enum ASSOCCLASS
{
    ASSOCCLASS_SHELL_KEY = 0,
    ASSOCCLASS_PROGID_KEY,
    ASSOCCLASS_PROGID_STR,
    ASSOCCLASS_CLSID_KEY,
    ASSOCCLASS_CLSID_STR,
    ASSOCCLASS_APP_KEY,
    ASSOCCLASS_APP_STR,
    ASSOCCLASS_SYSTEM_STR,
    ASSOCCLASS_FOLDER,
    ASSOCCLASS_STAR,
} ASSOCCLASS;
typedef struct ASSOCIATIONELEMENT_
{
    ASSOCCLASS ac;
    HKEY hkClass;
    PCWSTR pszClass;
} ASSOCIATIONELEMENT;
extern  HRESULT  AssocCreateForClasses( const ASSOCIATIONELEMENT *rgClasses, ULONG cClasses, const IID * const riid,  void **ppv);
typedef struct _SHQUERYRBINFO {
    DWORD   cbSize;
    __int64 i64Size;
    __int64 i64NumItems;
} SHQUERYRBINFO, *LPSHQUERYRBINFO;
extern  HRESULT  SHQueryRecycleBinA(LPCSTR pszRootPath,  LPSHQUERYRBINFO pSHQueryRBInfo);
extern  HRESULT  SHQueryRecycleBinW(LPCWSTR pszRootPath,  LPSHQUERYRBINFO pSHQueryRBInfo);
extern  HRESULT  SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags);
extern  HRESULT  SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags);
typedef enum
{
    QUNS_NOT_PRESENT               = 1,
    QUNS_BUSY                      = 2,
    QUNS_RUNNING_D3D_FULL_SCREEN   = 3,
    QUNS_PRESENTATION_MODE         = 4,
    QUNS_ACCEPTS_NOTIFICATIONS     = 5,
} QUERY_USER_NOTIFICATION_STATE;
extern  HRESULT  SHQueryUserNotificationState( QUERY_USER_NOTIFICATION_STATE *pquns);
typedef struct _NOTIFYICONDATAA {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    CHAR   szTip[128];
    DWORD dwState;
    DWORD dwStateMask;
    CHAR   szInfo[256];
    union {
        UINT  uTimeout;
        UINT  uVersion;
    } ;
    CHAR   szInfoTitle[64];
    DWORD dwInfoFlags;
    GUID guidItem;
    HICON hBalloonIcon;
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    WCHAR  szTip[128];
    DWORD dwState;
    DWORD dwStateMask;
    WCHAR  szInfo[256];
    union {
        UINT  uTimeout;
        UINT  uVersion;
    } ;
    WCHAR  szInfoTitle[64];
    DWORD dwInfoFlags;
    GUID guidItem;
    HICON hBalloonIcon;
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
typedef NOTIFYICONDATAA NOTIFYICONDATA;
typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
extern  BOOL  Shell_NotifyIconA(DWORD dwMessage,  PNOTIFYICONDATAA lpData);
extern  BOOL  Shell_NotifyIconW(DWORD dwMessage,  PNOTIFYICONDATAW lpData);
typedef struct _SHFILEINFOA
{
        HICON       hIcon;
        int         iIcon;
        DWORD       dwAttributes;
        CHAR        szDisplayName[260];
        CHAR        szTypeName[80];
} SHFILEINFOA;
typedef struct _SHFILEINFOW
{
        HICON       hIcon;
        int         iIcon;
        DWORD       dwAttributes;
        WCHAR       szDisplayName[260];
        WCHAR       szTypeName[80];
} SHFILEINFOW;
typedef SHFILEINFOA SHFILEINFO;
extern  DWORD_PTR  SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes,  SHFILEINFOA *psfi,
    UINT cbFileInfo, UINT uFlags);
extern  DWORD_PTR  SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes,  SHFILEINFOW *psfi,
    UINT cbFileInfo, UINT uFlags);
typedef struct _SHSTOCKICONINFO
{
    DWORD cbSize;
    HICON hIcon;
    int   iSysImageIndex;
    int   iIcon;
    WCHAR szPath[260];
} SHSTOCKICONINFO;
typedef enum SHSTOCKICONID
{
    SIID_DOCNOASSOC = 0,
    SIID_DOCASSOC = 1,
    SIID_APPLICATION = 2,
    SIID_FOLDER = 3,
    SIID_FOLDEROPEN = 4,
    SIID_DRIVE525 = 5,
    SIID_DRIVE35 = 6,
    SIID_DRIVEREMOVE = 7,
    SIID_DRIVEFIXED = 8,
    SIID_DRIVENET = 9,
    SIID_DRIVENETDISABLED = 10,
    SIID_DRIVECD = 11,
    SIID_DRIVERAM = 12,
    SIID_WORLD = 13,
    SIID_SERVER = 15,
    SIID_PRINTER = 16,
    SIID_MYNETWORK = 17,
    SIID_FIND = 22,
    SIID_HELP = 23,
    SIID_SHARE = 28,
    SIID_LINK = 29,
    SIID_SLOWFILE = 30,
    SIID_RECYCLER = 31,
    SIID_RECYCLERFULL = 32,
    SIID_MEDIACDAUDIO = 40,
    SIID_LOCK = 47,
    SIID_AUTOLIST = 49,
    SIID_PRINTERNET = 50,
    SIID_SERVERSHARE = 51,
    SIID_PRINTERFAX = 52,
    SIID_PRINTERFAXNET = 53,
    SIID_PRINTERFILE = 54,
    SIID_STACK = 55,
    SIID_MEDIASVCD = 56,
    SIID_STUFFEDFOLDER = 57,
    SIID_DRIVEUNKNOWN = 58,
    SIID_DRIVEDVD = 59,
    SIID_MEDIADVD = 60,
    SIID_MEDIADVDRAM = 61,
    SIID_MEDIADVDRW = 62,
    SIID_MEDIADVDR = 63,
    SIID_MEDIADVDROM = 64,
    SIID_MEDIACDAUDIOPLUS = 65,
    SIID_MEDIACDRW = 66,
    SIID_MEDIACDR = 67,
    SIID_MEDIACDBURN = 68,
    SIID_MEDIABLANKCD = 69,
    SIID_MEDIACDROM = 70,
    SIID_AUDIOFILES = 71,
    SIID_IMAGEFILES = 72,
    SIID_VIDEOFILES = 73,
    SIID_MIXEDFILES = 74,
    SIID_FOLDERBACK = 75,
    SIID_FOLDERFRONT = 76,
    SIID_SHIELD = 77,
    SIID_WARNING = 78,
    SIID_INFO = 79,
    SIID_ERROR = 80,
    SIID_KEY = 81,
    SIID_SOFTWARE = 82,
    SIID_RENAME = 83,
    SIID_DELETE = 84,
    SIID_MEDIAAUDIODVD = 85,
    SIID_MEDIAMOVIEDVD = 86,
    SIID_MEDIAENHANCEDCD = 87,
    SIID_MEDIAENHANCEDDVD = 88,
    SIID_MEDIAHDDVD = 89,
    SIID_MEDIABLURAY = 90,
    SIID_MEDIAVCD = 91,
    SIID_MEDIADVDPLUSR = 92,
    SIID_MEDIADVDPLUSRW = 93,
    SIID_DESKTOPPC = 94,
    SIID_MOBILEPC = 95,
    SIID_USERS = 96,
    SIID_MEDIASMARTMEDIA = 97,
    SIID_MEDIACOMPACTFLASH = 98,
    SIID_DEVICECELLPHONE = 99,
    SIID_DEVICECAMERA = 100,
    SIID_DEVICEVIDEOCAMERA = 101,
    SIID_DEVICEAUDIOPLAYER = 102,
    SIID_NETWORKCONNECT = 103,
    SIID_INTERNET = 104,
    SIID_ZIPFILE = 105,
    SIID_SETTINGS = 106,
    SIID_MAX_ICONS = 107,
} SHSTOCKICONID;
extern  HRESULT  SHGetStockIconInfo(SHSTOCKICONID siid, UINT uFlags,  SHSTOCKICONINFO *psii);
extern  BOOL  SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName,  ULARGE_INTEGER* pulFreeBytesAvailableToCaller,
     ULARGE_INTEGER* pulTotalNumberOfBytes,  ULARGE_INTEGER* pulTotalNumberOfFreeBytes);
extern  BOOL  SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName,  ULARGE_INTEGER* pulFreeBytesAvailableToCaller,
     ULARGE_INTEGER* pulTotalNumberOfBytes,  ULARGE_INTEGER* pulTotalNumberOfFreeBytes);
extern  BOOL  SHGetNewLinkInfoA( LPCSTR pszLinkTo,  LPCSTR pszDir,  LPSTR pszName,  BOOL *pfMustCopy,  UINT uFlags);
extern  BOOL  SHGetNewLinkInfoW( LPCWSTR pszLinkTo,  LPCWSTR pszDir,  LPWSTR pszName,  BOOL *pfMustCopy,  UINT uFlags);
extern  BOOL  SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, LPCSTR lpBuf2, BOOL fModal);
extern  BOOL  SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1, LPCWSTR lpBuf2, BOOL fModal);
typedef struct _OPEN_PRINTER_PROPS_INFOA
{
    DWORD       dwSize;
    LPSTR       pszSheetName;
    UINT        uSheetIndex;
    DWORD       dwFlags;
    BOOL        bModal;
} OPEN_PRINTER_PROPS_INFOA, *POPEN_PRINTER_PROPS_INFOA;
typedef struct _OPEN_PRINTER_PROPS_INFOW
{
    DWORD       dwSize;
    LPWSTR      pszSheetName;
    UINT        uSheetIndex;
    DWORD       dwFlags;
    BOOL        bModal;
} OPEN_PRINTER_PROPS_INFOW, *POPEN_PRINTER_PROPS_INFOW;
typedef OPEN_PRINTER_PROPS_INFOA OPEN_PRINTER_PROPS_INFO;
typedef POPEN_PRINTER_PROPS_INFOA POPEN_PRINTER_PROPS_INFO;
extern  HRESULT  SHLoadNonloadedIconOverlayIdentifiers(void);
extern  HRESULT  SHIsFileAvailableOffline( LPCWSTR pwszPath,  LPDWORD pdwStatus);
extern  HRESULT  SHSetLocalizedName(LPCWSTR pszPath, LPCWSTR pszResModule, int idsRes);
extern  HRESULT  SHRemoveLocalizedName(LPCWSTR pszPath);
extern  HRESULT  SHGetLocalizedName( LPCWSTR pszPath,  LPWSTR pszResModule, UINT cch,  int *pidsRes);
extern  int __cdecl ShellMessageBoxA(
     HINSTANCE hAppInst,
     HWND hWnd,
     LPCSTR lpcText,
     LPCSTR lpcTitle,
     UINT fuStyle, ...);
extern  int __cdecl ShellMessageBoxW(
     HINSTANCE hAppInst,
     HWND hWnd,
     LPCWSTR lpcText,
     LPCWSTR lpcTitle,
     UINT fuStyle, ...);
extern  BOOL  IsLFNDriveA(LPCSTR pszPath);
extern  BOOL  IsLFNDriveW(LPCWSTR pszPath);
extern HRESULT           SHEnumerateUnreadMailAccountsA(HKEY hKeyUser, DWORD dwIndex,  LPSTR pszMailAddress, int cchMailAddress);
extern HRESULT           SHEnumerateUnreadMailAccountsW(HKEY hKeyUser, DWORD dwIndex,  LPWSTR pszMailAddress, int cchMailAddress);
extern HRESULT           SHGetUnreadMailCountA(HKEY hKeyUser, LPCSTR pszMailAddress,  DWORD *pdwCount,  FILETIME *pFileTime,  LPSTR pszShellExecuteCommand, int cchShellExecuteCommand);
extern HRESULT           SHGetUnreadMailCountW(HKEY hKeyUser, LPCWSTR pszMailAddress,  DWORD *pdwCount,  FILETIME *pFileTime,  LPWSTR pszShellExecuteCommand, int cchShellExecuteCommand);
extern HRESULT           SHSetUnreadMailCountA(LPCSTR pszMailAddress, DWORD dwCount, LPCSTR pszShellExecuteCommand);
extern HRESULT           SHSetUnreadMailCountW(LPCWSTR pszMailAddress, DWORD dwCount, LPCWSTR pszShellExecuteCommand);
extern BOOL    SHTestTokenMembership( HANDLE hToken,  ULONG ulRID);
extern  HRESULT  SHGetImageList(int iImageList, const IID * const riid,  void **ppvObj);
typedef HRESULT ( *PFNCANSHAREFOLDERW)(LPCWSTR pszPath);
typedef HRESULT ( *PFNSHOWSHAREFOLDERUIW)(HWND hwndParent, LPCWSTR pszPath);
extern  BOOL  InitNetworkAddressControl();
typedef struct tagNC_ADDRESS
{
   struct NET_ADDRESS_INFO_ *pAddrInfo;
   USHORT  PortNumber;
   BYTE    PrefixLength;
} NC_ADDRESS, *PNC_ADDRESS;
extern HRESULT  SHGetDriveMedia(LPCWSTR pszDrive,  DWORD *pdwMediaContent);
typedef struct _PERF_DATA_BLOCK {
    WCHAR           Signature[4];
    DWORD           LittleEndian;
    DWORD           Version;
    DWORD           Revision;
    DWORD           TotalByteLength;
    DWORD           HeaderLength;
    DWORD           NumObjectTypes;
    LONG            DefaultObject;
    SYSTEMTIME      SystemTime;
    LARGE_INTEGER   PerfTime;
    LARGE_INTEGER   PerfFreq;
    LARGE_INTEGER   PerfTime100nSec;
    DWORD           SystemNameLength;
    DWORD           SystemNameOffset;
} PERF_DATA_BLOCK, *PPERF_DATA_BLOCK;
typedef struct _PERF_OBJECT_TYPE {
    DWORD           TotalByteLength;
    DWORD           DefinitionLength;
    DWORD           HeaderLength;
    DWORD           ObjectNameTitleIndex;
    LPWSTR          ObjectNameTitle;
    DWORD           ObjectHelpTitleIndex;
    LPWSTR          ObjectHelpTitle;
    DWORD           DetailLevel;
    DWORD           NumCounters;
    LONG            DefaultCounter;
    LONG            NumInstances;
    DWORD           CodePage;
    LARGE_INTEGER   PerfTime;
    LARGE_INTEGER   PerfFreq;
} PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE;
typedef struct _PERF_COUNTER_DEFINITION {
    DWORD           ByteLength;
    DWORD           CounterNameTitleIndex;
    LPWSTR          CounterNameTitle;
    DWORD           CounterHelpTitleIndex;
    LPWSTR          CounterHelpTitle;
    LONG            DefaultScale;
    DWORD           DetailLevel;
    DWORD           CounterType;
    DWORD           CounterSize;
    DWORD           CounterOffset;
} PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION;
typedef struct _PERF_INSTANCE_DEFINITION {
    DWORD           ByteLength;
    DWORD           ParentObjectTitleIndex;
    DWORD           ParentObjectInstance;
    LONG            UniqueID;
    DWORD           NameOffset;
    DWORD           NameLength;
} PERF_INSTANCE_DEFINITION, *PPERF_INSTANCE_DEFINITION;
typedef struct _PERF_COUNTER_BLOCK {
    DWORD           ByteLength;
} PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK;
typedef DWORD ( PM_OPEN_PROC) ( LPWSTR);
typedef DWORD ( PM_COLLECT_PROC) ( LPWSTR, LPVOID *, LPDWORD, LPDWORD);
typedef DWORD ( PM_CLOSE_PROC) (void);
typedef DWORD ( PM_QUERY_PROC) (LPDWORD, LPVOID *, LPDWORD, LPDWORD);
typedef unsigned char   u_char;
typedef unsigned short  u_short;
typedef unsigned int    u_int;
typedef unsigned long   u_long;
typedef UINT_PTR        SOCKET;
typedef struct fd_set {
        u_int   fd_count;
        SOCKET  fd_array[64];
} fd_set;
extern int   __WSAFDIsSet(SOCKET, fd_set  *);
struct timeval {
        long    tv_sec;
        long    tv_usec;
};
struct  hostent {
        char     * h_name;
        char     *  * h_aliases;
        short   h_addrtype;
        short   h_length;
        char     *  * h_addr_list;
};
struct  netent {
        char     * n_name;
        char     *  * n_aliases;
        short   n_addrtype;
        u_long  n_net;
};
struct  servent {
        char     * s_name;
        char     *  * s_aliases;
        short   s_port;
        char     * s_proto;
};
struct  protoent {
        char     * p_name;
        char     *  * p_aliases;
        short   p_proto;
};
typedef struct in_addr {
        union {
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { USHORT s_w1,s_w2; } S_un_w;
                ULONG S_addr;
        } S_un;
} IN_ADDR, *PIN_ADDR,  *LPIN_ADDR;
struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};
typedef struct WSAData {
        WORD                    wVersion;
        WORD                    wHighVersion;
        char                    szDescription[256+1];
        char                    szSystemStatus[128+1];
        unsigned short          iMaxSockets;
        unsigned short          iMaxUdpDg;
        char  *              lpVendorInfo;
} WSADATA;
typedef WSADATA  *LPWSADATA;
struct ip_mreq {
        struct in_addr  imr_multiaddr;
        struct in_addr  imr_interface;
};
struct sockaddr {
        u_short sa_family;
        char    sa_data[14];
};
struct sockproto {
        u_short sp_family;
        u_short sp_protocol;
};
struct  linger {
        u_short l_onoff;
        u_short l_linger;
};
SOCKET   accept (
                           SOCKET s,
                           struct sockaddr  *addr,
                            int  *addrlen);
int   bind (
                      SOCKET s,
                      const struct sockaddr  *addr,
                      int namelen);
int   closesocket (  SOCKET s);
int   connect (
                         SOCKET s,
                         const struct sockaddr  *name,
                         int namelen);
int   ioctlsocket (
                             SOCKET s,
                             long cmd,
                              u_long  *argp);
int   getpeername (
                             SOCKET s,
                             struct sockaddr  *name,
                              int  * namelen);
int   getsockname (
                             SOCKET s,
                             struct sockaddr  *name,
                              int  * namelen);
int   getsockopt (
                            SOCKET s,
                            int level,
                            int optname,
     char  * optval,
                             int  *optlen);
u_long   htonl (  u_long hostlong);
u_short   htons ( u_short hostshort);
unsigned long   inet_addr ( const char  * cp);
char  *   inet_ntoa ( struct in_addr in);
int   listen (
                        SOCKET s,
                        int backlog);
u_long   ntohl ( u_long netlong);
u_short   ntohs ( u_short netshort);
int   recv (
                      SOCKET s,
      char  * buf,
                      int len,
                      int flags);
int   recvfrom (
                          SOCKET s,
      char  * buf,
                          int len,
                          int flags,
     struct sockaddr  * from,
                           int  * fromlen);
int   select (
                         int nfds,
                          fd_set  *readfds,
                          fd_set  *writefds,
                          fd_set  *exceptfds,
                         const struct timeval  *timeout);
int   send (
                      SOCKET s,
                      const char  * buf,
                      int len,
                      int flags);
int   sendto (
                        SOCKET s,
                        const char  * buf,
                        int len,
                        int flags,
                        const struct sockaddr  *to,
                        int tolen);
int   setsockopt (
                            SOCKET s,
                            int level,
                            int optname,
                            const char  * optval,
                            int optlen);
int   shutdown (
                          SOCKET s,
                          int how);
SOCKET   socket (
                           int af,
                           int type,
                           int protocol);
struct hostent  *   gethostbyaddr(
                                               const char  * addr,
                                               int len,
                                               int type);
struct hostent  *   gethostbyname( const char  * name);
int   gethostname (
     char  * name,
                             int namelen);
struct servent  *   getservbyport(
                                               int port,
                                               const char  * proto);
struct servent  *   getservbyname(
                                               const char  * name,
                                               const char  * proto);
struct protoent  *   getprotobynumber( int proto);
struct protoent  *   getprotobyname( const char  * name);
int   WSAStartup(
                           WORD wVersionRequired,
                           LPWSADATA lpWSAData);
int   WSACleanup(void);
void   WSASetLastError( int iError);
int   WSAGetLastError(void);
BOOL   WSAIsBlocking(void);
int   WSAUnhookBlockingHook(void);
FARPROC   WSASetBlockingHook( FARPROC lpBlockFunc);
int   WSACancelBlockingCall(void);
HANDLE   WSAAsyncGetServByName(
                                         HWND hWnd,
                                         u_int wMsg,
                                         const char  * name,
                                         const char  * proto,
     char  * buf,
                                         int buflen);
HANDLE   WSAAsyncGetServByPort(
                                         HWND hWnd,
                                         u_int wMsg,
                                         int port,
                                         const char  * proto,
     char  * buf,
                                         int buflen);
HANDLE   WSAAsyncGetProtoByName(
                                          HWND hWnd,
                                          u_int wMsg,
                                          const char  * name,
     char  * buf,
                                          int buflen);
HANDLE   WSAAsyncGetProtoByNumber(
                                            HWND hWnd,
                                            u_int wMsg,
                                            int number,
     char  * buf,
                                            int buflen);
HANDLE   WSAAsyncGetHostByName(
                                         HWND hWnd,
                                         u_int wMsg,
                                         const char  * name,
     char  * buf,
                                         int buflen);
HANDLE   WSAAsyncGetHostByAddr(
                                         HWND hWnd,
                                         u_int wMsg,
                                         const char  * addr,
                                         int len,
                                         int type,
     char  * buf,
                                         int buflen);
int   WSACancelAsyncRequest( HANDLE hAsyncTaskHandle);
int   WSAAsyncSelect(
                               SOCKET s,
                               HWND hWnd,
                               u_int wMsg,
                               long lEvent);
int   WSARecvEx (
                           SOCKET s,
      char  * buf,
                           int len,
                            int  *flags);
typedef struct _TRANSMIT_FILE_BUFFERS {
    PVOID Head;
    DWORD HeadLength;
    PVOID Tail;
    DWORD TailLength;
} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
BOOL

TransmitFile (
     SOCKET hSocket,
     HANDLE hFile,
     DWORD nNumberOfBytesToWrite,
     DWORD nNumberOfBytesPerSend,
     LPOVERLAPPED lpOverlapped,
     LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
     DWORD dwReserved
    );
BOOL

AcceptEx (
     SOCKET sListenSocket,
     SOCKET sAcceptSocket,
     PVOID lpOutputBuffer,
     DWORD dwReceiveDataLength,
     DWORD dwLocalAddressLength,
     DWORD dwRemoteAddressLength,
     LPDWORD lpdwBytesReceived,
     LPOVERLAPPED lpOverlapped
    );
void

GetAcceptExSockaddrs (
     PVOID lpOutputBuffer,
     DWORD dwReceiveDataLength,
     DWORD dwLocalAddressLength,
     DWORD dwRemoteAddressLength,
     struct sockaddr **LocalSockaddr,
     LPINT LocalSockaddrLength,
     struct sockaddr **RemoteSockaddr,
     LPINT RemoteSockaddrLength
    );
typedef struct sockaddr SOCKADDR;
typedef struct sockaddr *PSOCKADDR;
typedef struct sockaddr  *LPSOCKADDR;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr_in *PSOCKADDR_IN;
typedef struct sockaddr_in  *LPSOCKADDR_IN;
typedef struct linger LINGER;
typedef struct linger *PLINGER;
typedef struct linger  *LPLINGER;
typedef struct fd_set FD_SET;
typedef struct fd_set *PFD_SET;
typedef struct fd_set  *LPFD_SET;
typedef struct hostent HOSTENT;
typedef struct hostent *PHOSTENT;
typedef struct hostent  *LPHOSTENT;
typedef struct servent SERVENT;
typedef struct servent *PSERVENT;
typedef struct servent  *LPSERVENT;
typedef struct protoent PROTOENT;
typedef struct protoent *PPROTOENT;
typedef struct protoent  *LPPROTOENT;
typedef struct timeval TIMEVAL;
typedef struct timeval *PTIMEVAL;
typedef struct timeval  *LPTIMEVAL;
typedef unsigned int ALG_ID;
typedef ULONG_PTR HCRYPTPROV;
typedef ULONG_PTR HCRYPTKEY;
typedef ULONG_PTR HCRYPTHASH;
typedef struct _CMS_KEY_INFO {
    DWORD       dwVersion;
    ALG_ID  Algid;
    BYTE    *pbOID;
    DWORD   cbOID;
} CMS_KEY_INFO, *PCMS_KEY_INFO;
typedef struct _HMAC_Info {
    ALG_ID  HashAlgid;
    BYTE    *pbInnerString;
    DWORD   cbInnerString;
    BYTE    *pbOuterString;
    DWORD   cbOuterString;
} HMAC_INFO, *PHMAC_INFO;
typedef struct _SCHANNEL_ALG {
    DWORD   dwUse;
    ALG_ID  Algid;
    DWORD   cBits;
    DWORD   dwFlags;
    DWORD   dwReserved;
} SCHANNEL_ALG, *PSCHANNEL_ALG;
typedef struct _PROV_ENUMALGS {
    ALG_ID    aiAlgid;
    DWORD     dwBitLen;
    DWORD     dwNameLen;
    CHAR      szName[20];
} PROV_ENUMALGS;
typedef struct _PROV_ENUMALGS_EX {
    ALG_ID    aiAlgid;
    DWORD     dwDefaultLen;
    DWORD     dwMinLen;
    DWORD     dwMaxLen;
    DWORD     dwProtocols;
    DWORD     dwNameLen;
    CHAR      szName[20];
    DWORD     dwLongNameLen;
    CHAR      szLongName[40];
} PROV_ENUMALGS_EX;
typedef struct _PUBLICKEYSTRUC {
        BYTE    bType;
        BYTE    bVersion;
        WORD    reserved;
        ALG_ID  aiKeyAlg;
} BLOBHEADER, PUBLICKEYSTRUC;
typedef struct _RSAPUBKEY {
        DWORD   magic;
        DWORD   bitlen;
        DWORD   pubexp;
} RSAPUBKEY;
typedef struct _PUBKEY {
        DWORD   magic;
        DWORD   bitlen;
} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
typedef struct _DSSSEED {
        DWORD   counter;
        BYTE    seed[20];
} DSSSEED;
typedef struct _PUBKEYVER3 {
        DWORD   magic;
        DWORD   bitlenP;
        DWORD   bitlenQ;
        DWORD   bitlenJ;
        DSSSEED DSSSeed;
} DHPUBKEY_VER3, DSSPUBKEY_VER3;
typedef struct _PRIVKEYVER3 {
        DWORD   magic;
        DWORD   bitlenP;
        DWORD   bitlenQ;
        DWORD   bitlenJ;
        DWORD   bitlenX;
        DSSSEED DSSSeed;
} DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
typedef struct _KEY_TYPE_SUBTYPE {
        DWORD   dwKeySpec;
        GUID    Type;
        GUID    Subtype;
} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
typedef struct _CERT_FORTEZZA_DATA_PROP {
    unsigned char   SerialNumber[8];
    int             CertIndex;
    unsigned char   CertLabel[36];
} CERT_FORTEZZA_DATA_PROP;
typedef struct _CRYPT_RC4_KEY_STATE {
    unsigned char Key[16];
    unsigned char SBox[256];
    unsigned char i;
    unsigned char j;
} CRYPT_RC4_KEY_STATE, *PCRYPT_RC4_KEY_STATE;
typedef struct _CRYPT_DES_KEY_STATE {
    unsigned char Key[8];
    unsigned char IV[8];
    unsigned char Feedback[8];
} CRYPT_DES_KEY_STATE, *PCRYPT_DES_KEY_STATE;
typedef struct _CRYPT_3DES_KEY_STATE {
    unsigned char Key[24];
    unsigned char IV[8];
    unsigned char Feedback[8];
} CRYPT_3DES_KEY_STATE, *PCRYPT_3DES_KEY_STATE;
typedef struct _CRYPT_AES_128_KEY_STATE {
    unsigned char Key[16];
    unsigned char IV[16];
    unsigned char EncryptionState[11][16];
    unsigned char DecryptionState[11][16];
    unsigned char Feedback[16];
} CRYPT_AES_128_KEY_STATE, *PCRYPT_AES_128_KEY_STATE;
typedef struct _CRYPT_AES_256_KEY_STATE {
    unsigned char Key[32];
    unsigned char IV[16];
    unsigned char EncryptionState[15][16];
    unsigned char DecryptionState[15][16];
    unsigned char Feedback[16];
} CRYPT_AES_256_KEY_STATE, *PCRYPT_AES_256_KEY_STATE;
typedef struct _CRYPTOAPI_BLOB {
                            DWORD   cbData;
      BYTE    *pbData;
} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
CERT_NAME_BLOB, *PCERT_NAME_BLOB,
CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
CERT_BLOB, *PCERT_BLOB,
CRL_BLOB, *PCRL_BLOB,
DATA_BLOB, *PDATA_BLOB,
CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
typedef struct _CMS_DH_KEY_INFO {
    DWORD               dwVersion;
    ALG_ID          Algid;
    LPSTR           pszContentEncObjId;
    CRYPT_DATA_BLOB PubInfo;
    void            *pReserved;
} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;

BOOL

CryptAcquireContextA(
           HCRYPTPROV  *phProv,
        LPCSTR    szContainer,
        LPCSTR    szProvider,
            DWORD       dwProvType,
            DWORD       dwFlags
    );

BOOL

CryptAcquireContextW(
           HCRYPTPROV  *phProv,
        LPCWSTR    szContainer,
        LPCWSTR    szProvider,
            DWORD       dwProvType,
            DWORD       dwFlags
    );

BOOL

CryptReleaseContext(
        HCRYPTPROV  hProv,
        DWORD       dwFlags
    );

BOOL

CryptGenKey(
        HCRYPTPROV  hProv,
        ALG_ID      Algid,
        DWORD       dwFlags,
       HCRYPTKEY   *phKey
    );

BOOL

CryptDeriveKey(
        HCRYPTPROV  hProv,
        ALG_ID      Algid,
        HCRYPTHASH  hBaseData,
        DWORD       dwFlags,
       HCRYPTKEY   *phKey
    );

BOOL

CryptDestroyKey(
        HCRYPTKEY   hKey
    );

BOOL

CryptSetKeyParam(
        HCRYPTKEY   hKey,
        DWORD       dwParam,
        const BYTE  *pbData,
        DWORD       dwFlags
    );

BOOL

CryptGetKeyParam(
                                            HCRYPTKEY   hKey,
                                            DWORD   dwParam,
     BYTE    *pbData,
                                         DWORD   *pdwDataLen,
                                            DWORD   dwFlags
    );

BOOL

CryptSetHashParam(
        HCRYPTHASH  hHash,
        DWORD       dwParam,
        const BYTE  *pbData,
        DWORD       dwFlags
    );

BOOL

CryptGetHashParam(
                                            HCRYPTHASH  hHash,
                                            DWORD   dwParam,
     BYTE    *pbData,
                                         DWORD   *pdwDataLen,
                                            DWORD   dwFlags
    );

BOOL

CryptSetProvParam(
        HCRYPTPROV  hProv,
        DWORD       dwParam,
        const BYTE  *pbData,
        DWORD       dwFlags
    );

BOOL

CryptGetProvParam(
                                                HCRYPTPROV  hProv,
                                                DWORD   dwParam,
     BYTE    *pbData,
                                             DWORD   *pdwDataLen,
                                                DWORD   dwFlags
    );

BOOL

CryptGenRandom(
                        HCRYPTPROV  hProv,
                        DWORD   dwLen,
       BYTE    *pbBuffer
    );

BOOL

CryptGetUserKey(
        HCRYPTPROV  hProv,
        DWORD       dwKeySpec,
       HCRYPTKEY   *phUserKey
    );

BOOL

CryptExportKey(
                                                HCRYPTKEY   hKey,
                                                HCRYPTKEY   hExpKey,
                                                DWORD   dwBlobType,
                                                DWORD   dwFlags,
     BYTE    *pbData,
                                             DWORD   *pdwDataLen
    );

BOOL

CryptImportKey(
                        HCRYPTPROV  hProv,
      const BYTE  *pbData,
                        DWORD       dwDataLen,
                        HCRYPTKEY   hPubKey,
                        DWORD       dwFlags,
                       HCRYPTKEY   *phKey
    );

 BOOL

CryptEncrypt(
                                                HCRYPTKEY   hKey,
                                                HCRYPTHASH  hHash,
                                                BOOL    Final,
                                                DWORD   dwFlags,
          BYTE    *pbData,
                                         DWORD   *pdwDataLen,
                                                DWORD   dwBufLen
    );

BOOL

CryptDecrypt(
                                                HCRYPTKEY   hKey,
                                                HCRYPTHASH  hHash,
                                                BOOL        Final,
                                                DWORD       dwFlags,
       BYTE        *pbData,
                                       DWORD       *pdwDataLen
    );

BOOL

CryptCreateHash(
        HCRYPTPROV  hProv,
        ALG_ID      Algid,
        HCRYPTKEY   hKey,
        DWORD       dwFlags,
       HCRYPTHASH  *phHash
    );

BOOL

CryptHashData(
                        HCRYPTHASH  hHash,
      const BYTE  *pbData,
                        DWORD   dwDataLen,
                        DWORD   dwFlags
    );

BOOL

CryptHashSessionKey(
        HCRYPTHASH  hHash,
        HCRYPTKEY   hKey,
        DWORD   dwFlags
    );

BOOL

CryptDestroyHash(
        HCRYPTHASH  hHash
    );

BOOL

CryptSignHashA(
                                              HCRYPTHASH  hHash,
                                              DWORD       dwKeySpec,
                                              LPCSTR    szDescription,
                                              DWORD       dwFlags,
     BYTE        *pbSignature,
                                           DWORD       *pdwSigLen
    );

BOOL

CryptSignHashW(
                                              HCRYPTHASH  hHash,
                                              DWORD       dwKeySpec,
                                              LPCWSTR    szDescription,
                                              DWORD       dwFlags,
     BYTE        *pbSignature,
                                           DWORD       *pdwSigLen
    );

BOOL

CryptVerifySignatureA(
                        HCRYPTHASH  hHash,
       const BYTE  *pbSignature,
                        DWORD       dwSigLen,
                        HCRYPTKEY   hPubKey,
                        LPCSTR    szDescription,
                        DWORD       dwFlags
    );

BOOL

CryptVerifySignatureW(
                        HCRYPTHASH  hHash,
       const BYTE  *pbSignature,
                        DWORD       dwSigLen,
                        HCRYPTKEY   hPubKey,
                        LPCWSTR    szDescription,
                        DWORD       dwFlags
    );

BOOL

CryptSetProviderA(
        LPCSTR    pszProvName,
        DWORD       dwProvType
    );

BOOL

CryptSetProviderW(
        LPCWSTR    pszProvName,
        DWORD       dwProvType
    );

BOOL

CryptSetProviderExA(
            LPCSTR pszProvName,
            DWORD dwProvType,
      DWORD *pdwReserved,
            DWORD dwFlags
    );

BOOL

CryptSetProviderExW(
            LPCWSTR pszProvName,
            DWORD dwProvType,
      DWORD *pdwReserved,
            DWORD dwFlags
    );

BOOL

CryptGetDefaultProviderA(
                                                DWORD   dwProvType,
                                          DWORD   *pdwReserved,
                                                DWORD   dwFlags,
       LPSTR pszProvName,
                                         DWORD   *pcbProvName
    );

BOOL

CryptGetDefaultProviderW(
                                                DWORD   dwProvType,
                                          DWORD   *pdwReserved,
                                                DWORD   dwFlags,
       LPWSTR pszProvName,
                                         DWORD   *pcbProvName
    );

BOOL

CryptEnumProviderTypesA(
                                                DWORD   dwIndex,
                                          DWORD   *pdwReserved,
                                                DWORD   dwFlags,
                                               DWORD   *pdwProvType,
       LPSTR szTypeName,
                                         DWORD   *pcbTypeName
    );

BOOL

CryptEnumProviderTypesW(
                                                DWORD   dwIndex,
                                          DWORD   *pdwReserved,
                                                DWORD   dwFlags,
                                               DWORD   *pdwProvType,
       LPWSTR szTypeName,
                                         DWORD   *pcbTypeName
    );

BOOL

CryptEnumProvidersA(
                                                    DWORD   dwIndex,
                                              DWORD   *pdwReserved,
                                                    DWORD   dwFlags,
                                                   DWORD   *pdwProvType,
     LPSTR szProvName,
                                                 DWORD   *pcbProvName
    );

BOOL

CryptEnumProvidersW(
                                                    DWORD   dwIndex,
                                              DWORD   *pdwReserved,
                                                    DWORD   dwFlags,
                                                   DWORD   *pdwProvType,
     LPWSTR szProvName,
                                                 DWORD   *pcbProvName
    );

BOOL

CryptContextAddRef(
            HCRYPTPROV  hProv,
      DWORD       *pdwReserved,
            DWORD       dwFlags
    );

BOOL

CryptDuplicateKey(
            HCRYPTKEY   hKey,
      DWORD   *pdwReserved,
            DWORD   dwFlags,
           HCRYPTKEY   *phKey
    );

BOOL

CryptDuplicateHash(
            HCRYPTHASH  hHash,
      DWORD       *pdwReserved,
            DWORD       dwFlags,
           HCRYPTHASH  *phHash
    );
BOOL
__cdecl
GetEncSChannel(
    BYTE **pData,
    DWORD *dwDecSize
    );
typedef  LONG NTSTATUS, *PNTSTATUS;
typedef struct __BCRYPT_KEY_LENGTHS_STRUCT
{
    ULONG   dwMinLength;
    ULONG   dwMaxLength;
    ULONG   dwIncrement;
} BCRYPT_KEY_LENGTHS_STRUCT;
typedef __declspec(align(4)) struct _BCRYPT_OID
{
    ULONG   cbOID;
    PUCHAR  pbOID;
} BCRYPT_OID;
typedef __declspec(align(4)) struct _BCRYPT_OID_LIST
{
    ULONG       dwOIDCount;
    BCRYPT_OID  *pOIDs;
} BCRYPT_OID_LIST;
typedef struct _BCRYPT_PKCS1_PADDING_INFO
{
    LPCWSTR pszAlgId;
} BCRYPT_PKCS1_PADDING_INFO;
typedef struct _BCRYPT_PSS_PADDING_INFO
{
    LPCWSTR pszAlgId;
    ULONG   cbSalt;
} BCRYPT_PSS_PADDING_INFO;
typedef struct _BCRYPT_OAEP_PADDING_INFO
{
    LPCWSTR pszAlgId;
    PUCHAR   pbLabel;
    ULONG   cbLabel;
} BCRYPT_OAEP_PADDING_INFO;
typedef struct _BCryptBuffer {
    ULONG   cbBuffer;
    ULONG   BufferType;
    PVOID   pvBuffer;
} BCryptBuffer, * PBCryptBuffer;
typedef struct _BCryptBufferDesc {
    ULONG   ulVersion;
    ULONG   cBuffers;
    PBCryptBuffer pBuffers;
} BCryptBufferDesc, * PBCryptBufferDesc;
typedef PVOID BCRYPT_HANDLE;
typedef PVOID BCRYPT_ALG_HANDLE;
typedef PVOID BCRYPT_KEY_HANDLE;
typedef PVOID BCRYPT_HASH_HANDLE;
typedef PVOID BCRYPT_SECRET_HANDLE;
typedef struct _BCRYPT_KEY_BLOB
{
    ULONG   Magic;
} BCRYPT_KEY_BLOB;
typedef struct _BCRYPT_RSAKEY_BLOB
{
    ULONG   Magic;
    ULONG   BitLength;
    ULONG   cbPublicExp;
    ULONG   cbModulus;
    ULONG   cbPrime1;
    ULONG   cbPrime2;
} BCRYPT_RSAKEY_BLOB;
typedef struct _BCRYPT_ECCKEY_BLOB
{
    ULONG   dwMagic;
    ULONG   cbKey;
} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;
typedef struct _BCRYPT_DH_KEY_BLOB
{
    ULONG   dwMagic;
    ULONG   cbKey;
} BCRYPT_DH_KEY_BLOB, *PBCRYPT_DH_KEY_BLOB;
typedef  struct _BCRYPT_DH_PARAMETER_HEADER
{
    ULONG           cbLength;
    ULONG           dwMagic;
    ULONG           cbKeyLength;
} BCRYPT_DH_PARAMETER_HEADER;
typedef struct _BCRYPT_DSA_KEY_BLOB
{
    ULONG   dwMagic;
    ULONG   cbKey;
    UCHAR   Count[4];
    UCHAR   Seed[20];
    UCHAR   q[20];
} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB;
typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER
{
    ULONG   dwMagic;
    ULONG   dwVersion;
    ULONG   cbKeyData;
} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;
typedef struct _BCRYPT_DSA_PARAMETER_HEADER
{
    ULONG           cbLength;
    ULONG           dwMagic;
    ULONG           cbKeyLength;
    UCHAR           Count[4];
    UCHAR           Seed[20];
    UCHAR           q[20];
} BCRYPT_DSA_PARAMETER_HEADER;
NTSTATUS

BCryptOpenAlgorithmProvider(
           BCRYPT_ALG_HANDLE   *phAlgorithm,
            LPCWSTR pszAlgId,
        LPCWSTR pszImplementation,
            ULONG   dwFlags);
typedef NTSTATUS
( * BCryptOpenAlgorithmProviderFn)(
       BCRYPT_ALG_HANDLE   *phAlgorithm,
        LPCWSTR pszAlgId,
        ULONG   dwFlags);
typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
{
    LPWSTR  pszName;
    ULONG   dwClass;
    ULONG   dwFlags;
} BCRYPT_ALGORITHM_IDENTIFIER;
NTSTATUS

BCryptEnumAlgorithms(
        ULONG   dwAlgOperations,
       ULONG   *pAlgCount,
       BCRYPT_ALGORITHM_IDENTIFIER **ppAlgList,
        ULONG   dwFlags);
typedef struct _BCRYPT_PROVIDER_NAME
{
    LPWSTR  pszProviderName;
} BCRYPT_PROVIDER_NAME;
NTSTATUS

BCryptEnumProviders(
        LPCWSTR pszAlgId,
       ULONG   *pImplCount,
       BCRYPT_PROVIDER_NAME    **ppImplList,
        ULONG   dwFlags);
NTSTATUS

BCryptGetProperty(
                                            BCRYPT_HANDLE   hObject,
                                            LPCWSTR pszProperty,
     PUCHAR   pbOutput,
                                            ULONG   cbOutput,
                                           ULONG   *pcbResult,
                                            ULONG   dwFlags);
NTSTATUS

BCryptSetProperty(
                     BCRYPT_HANDLE   hObject,
                        LPCWSTR pszProperty,
        PUCHAR   pbInput,
                        ULONG   cbInput,
                        ULONG   dwFlags);
NTSTATUS

BCryptCloseAlgorithmProvider(
     BCRYPT_ALG_HANDLE   hAlgorithm,
        ULONG   dwFlags);
void

BCryptFreeBuffer(
     PVOID   pvBuffer);
NTSTATUS

BCryptGenerateSymmetricKey(
                             BCRYPT_ALG_HANDLE   hAlgorithm,
                               BCRYPT_KEY_HANDLE   *phKey,
      PUCHAR   pbKeyObject,
                                ULONG   cbKeyObject,
               PUCHAR   pbSecret,
                                ULONG   cbSecret,
                                ULONG   dwFlags);
NTSTATUS

BCryptGenerateKeyPair(
     BCRYPT_ALG_HANDLE   hAlgorithm,
       BCRYPT_KEY_HANDLE   *phKey,
        ULONG   dwLength,
        ULONG   dwFlags);
NTSTATUS

BCryptEncrypt(
                                         BCRYPT_KEY_HANDLE hKey,
                            PUCHAR   pbInput,
                                            ULONG   cbInput,
                                        void    *pPaddingInfo,
                        PUCHAR   pbIV,
                                            ULONG   cbIV,
     PUCHAR   pbOutput,
                                            ULONG   cbOutput,
                                           ULONG   *pcbResult,
                                            ULONG   dwFlags);
NTSTATUS

BCryptDecrypt(
                                         BCRYPT_KEY_HANDLE   hKey,
                            PUCHAR   pbInput,
                                            ULONG   cbInput,
                                        void    *pPaddingInfo,
                        PUCHAR   pbIV,
                                            ULONG   cbIV,
     PUCHAR   pbOutput,
                                            ULONG   cbOutput,
                                           ULONG   *pcbResult,
                                            ULONG   dwFlags);
NTSTATUS

BCryptExportKey(
                                            BCRYPT_KEY_HANDLE   hKey,
                                        BCRYPT_KEY_HANDLE   hExportKey,
                                            LPCWSTR pszBlobType,
     PUCHAR   pbOutput,
                                            ULONG   cbOutput,
                                           ULONG   *pcbResult,
                                            ULONG   dwFlags);
NTSTATUS

BCryptImportKey(
                                BCRYPT_ALG_HANDLE hAlgorithm,
                            BCRYPT_KEY_HANDLE hImportKey,
                                LPCWSTR pszBlobType,
                               BCRYPT_KEY_HANDLE *phKey,
      PUCHAR   pbKeyObject,
                                ULONG   cbKeyObject,
                PUCHAR   pbInput,
                                ULONG   cbInput,
                                ULONG   dwFlags);
NTSTATUS

BCryptImportKeyPair(
                                BCRYPT_ALG_HANDLE hAlgorithm,
                            BCRYPT_KEY_HANDLE hImportKey,
                                LPCWSTR pszBlobType,
                               BCRYPT_KEY_HANDLE *phKey,
                PUCHAR   pbInput,
                                ULONG   cbInput,
                                ULONG   dwFlags);
NTSTATUS

BCryptDuplicateKey(
                                BCRYPT_KEY_HANDLE   hKey,
                               BCRYPT_KEY_HANDLE   *phNewKey,
      PUCHAR   pbKeyObject,
                                ULONG   cbKeyObject,
                                ULONG   dwFlags);
NTSTATUS

BCryptFinalizeKeyPair(
     BCRYPT_KEY_HANDLE   hKey,
        ULONG   dwFlags);
NTSTATUS

BCryptDestroyKey(
     BCRYPT_KEY_HANDLE   hKey);
NTSTATUS

BCryptDestroySecret(
     BCRYPT_SECRET_HANDLE   hSecret);
NTSTATUS

BCryptSignHash(
                                            BCRYPT_KEY_HANDLE   hKey,
                                        void    *pPaddingInfo,
                            PUCHAR   pbInput,
                                            ULONG   cbInput,
     PUCHAR   pbOutput,
                                            ULONG   cbOutput,
                                           ULONG   *pcbResult,
                                            ULONG   dwFlags);
NTSTATUS

BCryptVerifySignature(
                            BCRYPT_KEY_HANDLE   hKey,
                        void    *pPaddingInfo,
             PUCHAR   pbHash,
                            ULONG   cbHash,
        PUCHAR   pbSignature,
                            ULONG   cbSignature,
                            ULONG   dwFlags);
NTSTATUS

BCryptSecretAgreement(
        BCRYPT_KEY_HANDLE       hPrivKey,
        BCRYPT_KEY_HANDLE       hPubKey,
       BCRYPT_SECRET_HANDLE    *phAgreedSecret,
        ULONG                   dwFlags);
NTSTATUS

BCryptDeriveKey(
            BCRYPT_SECRET_HANDLE hSharedSecret,
            LPCWSTR              pwszKDF,
        BCryptBufferDesc     *pParameterList,
     PUCHAR pbDerivedKey,
            ULONG                cbDerivedKey,
           ULONG                *pcbResult,
            ULONG                dwFlags);
NTSTATUS

BCryptCreateHash(
                             BCRYPT_ALG_HANDLE   hAlgorithm,
                               BCRYPT_HASH_HANDLE  *phHash,
     PUCHAR   pbHashObject,
                                ULONG   cbHashObject,
           PUCHAR   pbSecret,
                                ULONG   cbSecret,
                                ULONG   dwFlags);
NTSTATUS

BCryptHashData(
                     BCRYPT_HASH_HANDLE  hHash,
        PUCHAR   pbInput,
                        ULONG   cbInput,
                        ULONG   dwFlags);
NTSTATUS

BCryptFinishHash(
                         BCRYPT_HASH_HANDLE hHash,
     PUCHAR   pbOutput,
                            ULONG   cbOutput,
                            ULONG   dwFlags);
NTSTATUS

BCryptDuplicateHash(
                                BCRYPT_HASH_HANDLE  hHash,
                               BCRYPT_HASH_HANDLE  *phNewHash,
     PUCHAR   pbHashObject,
                                ULONG   cbHashObject,
                                ULONG   dwFlags);
NTSTATUS

BCryptDestroyHash(
     BCRYPT_HASH_HANDLE  hHash);
NTSTATUS

BCryptGenRandom(
                             BCRYPT_ALG_HANDLE   hAlgorithm,
       PUCHAR  pbBuffer,
                                ULONG   cbBuffer,
                                ULONG   dwFlags);
typedef struct _BCRYPT_INTERFACE_VERSION
{
    USHORT MajorVersion;
    USHORT MinorVersion;
} BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION;
typedef struct _CRYPT_INTERFACE_REG
{
    ULONG dwInterface;
    ULONG dwFlags;
    ULONG cFunctions;
    PWSTR *rgpszFunctions;
}
CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG;
typedef struct _CRYPT_IMAGE_REG
{
    PWSTR pszImage;
    ULONG cInterfaces;
    PCRYPT_INTERFACE_REG *rgpInterfaces;
}
CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG;
typedef struct _CRYPT_PROVIDER_REG
{
    ULONG cAliases;
    PWSTR *rgpszAliases;
    PCRYPT_IMAGE_REG pUM;
    PCRYPT_IMAGE_REG pKM;
}
CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG;
typedef struct _CRYPT_PROVIDERS
{
    ULONG cProviders;
    PWSTR *rgpszProviders;
}
CRYPT_PROVIDERS, *PCRYPT_PROVIDERS;
typedef struct _CRYPT_CONTEXT_CONFIG
{
    ULONG dwFlags;
    ULONG dwReserved;
}
CRYPT_CONTEXT_CONFIG, *PCRYPT_CONTEXT_CONFIG;
typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG
{
    ULONG dwFlags;
    ULONG dwReserved;
}
CRYPT_CONTEXT_FUNCTION_CONFIG, *PCRYPT_CONTEXT_FUNCTION_CONFIG;
typedef struct _CRYPT_CONTEXTS
{
    ULONG cContexts;
    PWSTR *rgpszContexts;
}
CRYPT_CONTEXTS, *PCRYPT_CONTEXTS;
typedef struct _CRYPT_CONTEXT_FUNCTIONS
{
    ULONG cFunctions;
    PWSTR *rgpszFunctions;
}
CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS;
typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS
{
    ULONG cProviders;
    PWSTR *rgpszProviders;
}
CRYPT_CONTEXT_FUNCTION_PROVIDERS, *PCRYPT_CONTEXT_FUNCTION_PROVIDERS;
typedef struct _CRYPT_PROPERTY_REF
{
    PWSTR pszProperty;
    ULONG cbValue;
    PUCHAR pbValue;
}
CRYPT_PROPERTY_REF, *PCRYPT_PROPERTY_REF;
typedef struct _CRYPT_IMAGE_REF
{
    PWSTR pszImage;
    ULONG dwFlags;
}
CRYPT_IMAGE_REF, *PCRYPT_IMAGE_REF;
typedef struct _CRYPT_PROVIDER_REF
{
    ULONG dwInterface;
    PWSTR pszFunction;
    PWSTR pszProvider;
    ULONG cProperties;
    PCRYPT_PROPERTY_REF *rgpProperties;
    PCRYPT_IMAGE_REF pUM;
    PCRYPT_IMAGE_REF pKM;
}
CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF;
typedef struct _CRYPT_PROVIDER_REFS
{
    ULONG cProviders;
    PCRYPT_PROVIDER_REF *rgpProviders;
}
CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS;
NTSTATUS

BCryptQueryProviderRegistration(
     LPCWSTR pszProvider,
     ULONG dwMode,
     ULONG dwInterface,
     ULONG* pcbBuffer,
     PCRYPT_PROVIDER_REG *ppBuffer);
NTSTATUS

BCryptEnumRegisteredProviders(
     ULONG* pcbBuffer,
     PCRYPT_PROVIDERS *ppBuffer);
NTSTATUS

BCryptCreateContext(
     ULONG dwTable,
     LPCWSTR pszContext,
     PCRYPT_CONTEXT_CONFIG pConfig);
NTSTATUS

BCryptDeleteContext(
     ULONG dwTable,
     LPCWSTR pszContext);
NTSTATUS

BCryptEnumContexts(
     ULONG dwTable,
     ULONG* pcbBuffer,
     PCRYPT_CONTEXTS *ppBuffer);
NTSTATUS

BCryptConfigureContext(
     ULONG dwTable,
     LPCWSTR pszContext,
     PCRYPT_CONTEXT_CONFIG pConfig);
NTSTATUS

BCryptQueryContextConfiguration(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG* pcbBuffer,
     PCRYPT_CONTEXT_CONFIG *ppBuffer);
NTSTATUS

BCryptAddContextFunction(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     ULONG dwPosition);
NTSTATUS

BCryptRemoveContextFunction(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction);
NTSTATUS

BCryptEnumContextFunctions(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     ULONG* pcbBuffer,
     PCRYPT_CONTEXT_FUNCTIONS *ppBuffer);
NTSTATUS

BCryptConfigureContextFunction(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     PCRYPT_CONTEXT_FUNCTION_CONFIG pConfig);
NTSTATUS

BCryptQueryContextFunctionConfiguration(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     ULONG* pcbBuffer,
     PCRYPT_CONTEXT_FUNCTION_CONFIG *ppBuffer);
NTSTATUS

BCryptEnumContextFunctionProviders(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     ULONG* pcbBuffer,
     PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer);
NTSTATUS

BCryptSetContextFunctionProperty(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     LPCWSTR pszProperty,
     ULONG cbValue,
     PUCHAR pbValue);
NTSTATUS

BCryptQueryContextFunctionProperty(
     ULONG dwTable,
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     LPCWSTR pszProperty,
     ULONG* pcbValue,
     PUCHAR *ppbValue);
NTSTATUS

BCryptRegisterConfigChangeNotify(
     HANDLE *phEvent);
NTSTATUS

BCryptUnregisterConfigChangeNotify(
     HANDLE hEvent);
NTSTATUS
BCryptResolveProviders(
     LPCWSTR pszContext,
     ULONG dwInterface,
     LPCWSTR pszFunction,
     LPCWSTR pszProvider,
     ULONG dwMode,
     ULONG dwFlags,
     ULONG* pcbBuffer,
     PCRYPT_PROVIDER_REFS *ppBuffer);
NTSTATUS

BCryptGetFipsAlgorithmMode(
     BOOLEAN *pfEnabled
    );
typedef LONG SECURITY_STATUS;
typedef BCryptBuffer     NCryptBuffer;
typedef BCryptBuffer*    PNCryptBuffer;
typedef BCryptBufferDesc NCryptBufferDesc;
typedef BCryptBufferDesc* PNCryptBufferDesc;
typedef ULONG_PTR NCRYPT_HANDLE;
typedef ULONG_PTR NCRYPT_PROV_HANDLE;
typedef ULONG_PTR NCRYPT_KEY_HANDLE;
typedef ULONG_PTR NCRYPT_HASH_HANDLE;
typedef ULONG_PTR NCRYPT_SECRET_HANDLE;
SECURITY_STATUS

NCryptOpenStorageProvider(
       NCRYPT_PROV_HANDLE *phProvider,
     LPCWSTR pszProviderName,
        DWORD   dwFlags);
typedef struct _NCryptAlgorithmName
{
    LPWSTR  pszName;
    DWORD   dwClass;
    DWORD   dwAlgOperations;
    DWORD   dwFlags;
} NCryptAlgorithmName;
SECURITY_STATUS

NCryptEnumAlgorithms(
        NCRYPT_PROV_HANDLE hProvider,
        DWORD   dwAlgOperations,
       DWORD * pdwAlgCount,
     NCryptAlgorithmName **ppAlgList,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptIsAlgSupported(
        NCRYPT_PROV_HANDLE hProvider,
        LPCWSTR pszAlgId,
        DWORD   dwFlags);
typedef struct NCryptKeyName
{
    LPWSTR  pszName;
    LPWSTR  pszAlgid;
    DWORD   dwLegacyKeySpec;
    DWORD   dwFlags;
} NCryptKeyName;
SECURITY_STATUS

NCryptEnumKeys(
        NCRYPT_PROV_HANDLE hProvider,
     LPCWSTR pszScope,
     NCryptKeyName **ppKeyName,
     PVOID * ppEnumState,
        DWORD   dwFlags);
typedef struct NCryptProviderName
{
    LPWSTR  pszName;
    LPWSTR  pszComment;
} NCryptProviderName;
SECURITY_STATUS

NCryptEnumStorageProviders(
       DWORD * pdwProviderCount,
     NCryptProviderName **ppProviderList,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptFreeBuffer(
     PVOID   pvInput);
SECURITY_STATUS

NCryptOpenKey(
     NCRYPT_PROV_HANDLE hProvider,
       NCRYPT_KEY_HANDLE *phKey,
        LPCWSTR pszKeyName,
     DWORD  dwLegacyKeySpec,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptCreatePersistedKey(
        NCRYPT_PROV_HANDLE hProvider,
       NCRYPT_KEY_HANDLE *phKey,
        LPCWSTR pszAlgId,
     LPCWSTR pszKeyName,
        DWORD   dwLegacyKeySpec,
        DWORD   dwFlags);
typedef struct __NCRYPT_UI_POLICY_BLOB
{
    DWORD   dwVersion;
    DWORD   dwFlags;
    DWORD   cbCreationTitle;
    DWORD   cbFriendlyName;
    DWORD   cbDescription;
} NCRYPT_UI_POLICY_BLOB;
typedef struct __NCRYPT_UI_POLICY
{
    DWORD   dwVersion;
    DWORD   dwFlags;
    LPCWSTR pszCreationTitle;
    LPCWSTR pszFriendlyName;
    LPCWSTR pszDescription;
} NCRYPT_UI_POLICY;
typedef struct __NCRYPT_SUPPORTED_LENGTHS
{
    DWORD   dwMinLength;
    DWORD   dwMaxLength;
    DWORD   dwIncrement;
    DWORD   dwDefaultLength;
} NCRYPT_SUPPORTED_LENGTHS;
SECURITY_STATUS

NCryptGetProperty(
        NCRYPT_HANDLE hObject,
        LPCWSTR pszProperty,
     PBYTE pbOutput,
        DWORD   cbOutput,
       DWORD * pcbResult,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptSetProperty(
        NCRYPT_HANDLE hObject,
        LPCWSTR pszProperty,
     PBYTE pbInput,
        DWORD   cbInput,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptFinalizeKey(
        NCRYPT_KEY_HANDLE hKey,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptEncrypt(
        NCRYPT_KEY_HANDLE hKey,
     PBYTE pbInput,
        DWORD   cbInput,
        void *pPaddingInfo,
     PBYTE pbOutput,
        DWORD   cbOutput,
       DWORD * pcbResult,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptDecrypt(
        NCRYPT_KEY_HANDLE hKey,
     PBYTE pbInput,
        DWORD   cbInput,
        void *pPaddingInfo,
     PBYTE pbOutput,
        DWORD   cbOutput,
       DWORD * pcbResult,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptImportKey(
        NCRYPT_PROV_HANDLE hProvider,
     NCRYPT_KEY_HANDLE hImportKey,
        LPCWSTR pszBlobType,
     NCryptBufferDesc *pParameterList,
       NCRYPT_KEY_HANDLE *phKey,
     PBYTE pbData,
        DWORD   cbData,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptExportKey(
        NCRYPT_KEY_HANDLE hKey,
     NCRYPT_KEY_HANDLE hExportKey,
        LPCWSTR pszBlobType,
     NCryptBufferDesc *pParameterList,
     PBYTE pbOutput,
        DWORD   cbOutput,
       DWORD * pcbResult,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptSignHash(
        NCRYPT_KEY_HANDLE hKey,
        void *pPaddingInfo,
     PBYTE pbHashValue,
        DWORD   cbHashValue,
     PBYTE pbSignature,
        DWORD   cbSignature,
       DWORD * pcbResult,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptVerifySignature(
        NCRYPT_KEY_HANDLE hKey,
        void *pPaddingInfo,
     PBYTE pbHashValue,
        DWORD   cbHashValue,
     PBYTE pbSignature,
        DWORD   cbSignature,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptDeleteKey(
        NCRYPT_KEY_HANDLE hKey,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptFreeObject(
        NCRYPT_HANDLE hObject);
BOOL

NCryptIsKeyHandle(
        NCRYPT_KEY_HANDLE hKey);
SECURITY_STATUS

NCryptTranslateHandle(
     NCRYPT_PROV_HANDLE *phProvider,
       NCRYPT_KEY_HANDLE *phKey,
        HCRYPTPROV hLegacyProv,
     HCRYPTKEY hLegacyKey,
     DWORD  dwLegacyKeySpec,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptNotifyChangeKey(
        NCRYPT_PROV_HANDLE hProvider,
     HANDLE *phEvent,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptSecretAgreement(
        NCRYPT_KEY_HANDLE hPrivKey,
        NCRYPT_KEY_HANDLE hPubKey,
       NCRYPT_SECRET_HANDLE *phAgreedSecret,
        DWORD   dwFlags);
SECURITY_STATUS

NCryptDeriveKey(
            NCRYPT_SECRET_HANDLE hSharedSecret,
            LPCWSTR              pwszKDF,
        NCryptBufferDesc     *pParameterList,
     PBYTE pbDerivedKey,
            DWORD                cbDerivedKey,
           DWORD                *pcbResult,
            ULONG                dwFlags);
typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
typedef ULONG_PTR HCRYPTPROV_LEGACY;
typedef struct _CRYPT_BIT_BLOB {
    DWORD   cbData;
    BYTE    *pbData;
    DWORD   cUnusedBits;
} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
    LPSTR               pszObjId;
    CRYPT_OBJID_BLOB    Parameters;
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
typedef struct _CRYPT_OBJID_TABLE {
    DWORD   dwAlgId;
    LPCSTR  pszObjId;
} CRYPT_OBJID_TABLE, *PCRYPT_OBJID_TABLE;
typedef struct _CRYPT_HASH_INFO {
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_HASH_BLOB             Hash;
} CRYPT_HASH_INFO, *PCRYPT_HASH_INFO;
typedef struct _CERT_EXTENSION {
    LPSTR               pszObjId;
    BOOL                fCritical;
    CRYPT_OBJID_BLOB    Value;
} CERT_EXTENSION, *PCERT_EXTENSION;
typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
    LPSTR               pszObjId;
    CRYPT_OBJID_BLOB    Value;
} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
typedef struct _CRYPT_ATTRIBUTE {
    LPSTR               pszObjId;
    DWORD               cValue;
    PCRYPT_ATTR_BLOB    rgValue;
} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
typedef struct _CRYPT_ATTRIBUTES {
    DWORD                cAttr;
    PCRYPT_ATTRIBUTE     rgAttr;
} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
typedef struct _CERT_RDN_ATTR {
    LPSTR                   pszObjId;
    DWORD                   dwValueType;
    CERT_RDN_VALUE_BLOB     Value;
} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
typedef struct _CERT_RDN {
    DWORD           cRDNAttr;
    PCERT_RDN_ATTR  rgRDNAttr;
} CERT_RDN, *PCERT_RDN;
typedef struct _CERT_NAME_INFO {
    DWORD       cRDN;
    PCERT_RDN   rgRDN;
} CERT_NAME_INFO, *PCERT_NAME_INFO;
typedef struct _CERT_NAME_VALUE {
    DWORD               dwValueType;
    CERT_RDN_VALUE_BLOB Value;
} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
typedef struct _CERT_PUBLIC_KEY_INFO {
    CRYPT_ALGORITHM_IDENTIFIER    Algorithm;
    CRYPT_BIT_BLOB                PublicKey;
} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
typedef struct _CRYPT_PRIVATE_KEY_INFO{
    DWORD                       Version;
    CRYPT_ALGORITHM_IDENTIFIER  Algorithm;
    CRYPT_DER_BLOB              PrivateKey;
    PCRYPT_ATTRIBUTES           pAttributes;
}  CRYPT_PRIVATE_KEY_INFO, *PCRYPT_PRIVATE_KEY_INFO;
typedef struct _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO{
    CRYPT_ALGORITHM_IDENTIFIER  EncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedPrivateKey;
} CRYPT_ENCRYPTED_PRIVATE_KEY_INFO, *PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
typedef BOOL ( *PCRYPT_DECRYPT_PRIVATE_KEY_FUNC)(
     CRYPT_ALGORITHM_IDENTIFIER Algorithm,
     CRYPT_DATA_BLOB EncryptedPrivateKey,
     BYTE* pbClearTextKey,
     DWORD* pcbClearTextKey,
     LPVOID pVoidDecryptFunc);
typedef BOOL ( *PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC)(
     CRYPT_ALGORITHM_IDENTIFIER* pAlgorithm,
     CRYPT_DATA_BLOB* pClearTextPrivateKey,
     BYTE* pbEncryptedKey,
     DWORD* pcbEncryptedKey,
     LPVOID pVoidEncryptFunc);
typedef BOOL ( *PCRYPT_RESOLVE_HCRYPTPROV_FUNC)(
                                                       CRYPT_PRIVATE_KEY_INFO      *pPrivateKeyInfo,
                                                       HCRYPTPROV                  *phCryptProv,
                                                       LPVOID                      pVoidResolveFunc);
typedef struct _CRYPT_PKCS8_IMPORT_PARAMS{
    CRYPT_DIGEST_BLOB               PrivateKey;
    PCRYPT_RESOLVE_HCRYPTPROV_FUNC  pResolvehCryptProvFunc;
    LPVOID                          pVoidResolveFunc;
    PCRYPT_DECRYPT_PRIVATE_KEY_FUNC pDecryptPrivateKeyFunc;
    LPVOID                          pVoidDecryptFunc;
} CRYPT_PKCS8_IMPORT_PARAMS, *PCRYPT_PKCS8_IMPORT_PARAMS, CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS, *PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS;
typedef struct _CRYPT_PKCS8_EXPORT_PARAMS{
    HCRYPTPROV                      hCryptProv;
    DWORD                           dwKeySpec;
    LPSTR                           pszPrivateKeyObjId;
    PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC pEncryptPrivateKeyFunc;
    LPVOID                          pVoidEncryptFunc;
} CRYPT_PKCS8_EXPORT_PARAMS, *PCRYPT_PKCS8_EXPORT_PARAMS;
typedef struct _CERT_INFO {
    DWORD                       dwVersion;
    CRYPT_INTEGER_BLOB          SerialNumber;
    CRYPT_ALGORITHM_IDENTIFIER  SignatureAlgorithm;
    CERT_NAME_BLOB              Issuer;
    FILETIME                    NotBefore;
    FILETIME                    NotAfter;
    CERT_NAME_BLOB              Subject;
    CERT_PUBLIC_KEY_INFO        SubjectPublicKeyInfo;
    CRYPT_BIT_BLOB              IssuerUniqueId;
    CRYPT_BIT_BLOB              SubjectUniqueId;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} CERT_INFO, *PCERT_INFO;
typedef struct _CRL_ENTRY {
    CRYPT_INTEGER_BLOB  SerialNumber;
    FILETIME            RevocationDate;
    DWORD               cExtension;
    PCERT_EXTENSION     rgExtension;
} CRL_ENTRY, *PCRL_ENTRY;
typedef struct _CRL_INFO {
    DWORD                       dwVersion;
    CRYPT_ALGORITHM_IDENTIFIER  SignatureAlgorithm;
    CERT_NAME_BLOB              Issuer;
    FILETIME                    ThisUpdate;
    FILETIME                    NextUpdate;
    DWORD                       cCRLEntry;
    PCRL_ENTRY                  rgCRLEntry;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} CRL_INFO, *PCRL_INFO;
typedef struct _CERT_REQUEST_INFO {
    DWORD                   dwVersion;
    CERT_NAME_BLOB          Subject;
    CERT_PUBLIC_KEY_INFO    SubjectPublicKeyInfo;
    DWORD                   cAttribute;
    PCRYPT_ATTRIBUTE        rgAttribute;
} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;
typedef struct _CERT_KEYGEN_REQUEST_INFO {
    DWORD                   dwVersion;
    CERT_PUBLIC_KEY_INFO    SubjectPublicKeyInfo;
    LPWSTR                  pwszChallengeString;
} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;
typedef struct _CERT_SIGNED_CONTENT_INFO {
    CRYPT_DER_BLOB              ToBeSigned;
    CRYPT_ALGORITHM_IDENTIFIER  SignatureAlgorithm;
    CRYPT_BIT_BLOB              Signature;
} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
typedef struct _CTL_USAGE {
    DWORD               cUsageIdentifier;
    LPSTR               *rgpszUsageIdentifier;
} CTL_USAGE, *PCTL_USAGE,
CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
typedef struct _CTL_ENTRY {
    CRYPT_DATA_BLOB     SubjectIdentifier;
    DWORD               cAttribute;
    PCRYPT_ATTRIBUTE    rgAttribute;
} CTL_ENTRY, *PCTL_ENTRY;
typedef struct _CTL_INFO {
    DWORD                       dwVersion;
    CTL_USAGE                   SubjectUsage;
    CRYPT_DATA_BLOB             ListIdentifier;
    CRYPT_INTEGER_BLOB          SequenceNumber;
    FILETIME                    ThisUpdate;
    FILETIME                    NextUpdate;
    CRYPT_ALGORITHM_IDENTIFIER  SubjectAlgorithm;
    DWORD                       cCTLEntry;
    PCTL_ENTRY                  rgCTLEntry;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} CTL_INFO, *PCTL_INFO;
typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
    LPSTR                   pszTimeStampAlgorithm;
    LPSTR                   pszContentType;
    CRYPT_OBJID_BLOB        Content;
    DWORD                   cAttribute;
    PCRYPT_ATTRIBUTE        rgAttribute;
} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;
typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
    LPWSTR      pwszName;
    LPWSTR      pwszValue;
} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, * PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
typedef struct _CRYPT_CSP_PROVIDER {
    DWORD           dwKeySpec;
    LPWSTR          pwszProviderName;
    CRYPT_BIT_BLOB  Signature;
} CRYPT_CSP_PROVIDER, * PCRYPT_CSP_PROVIDER;

BOOL

CryptFormatObject(
     DWORD dwCertEncodingType,
     DWORD dwFormatType,
     DWORD dwFormatStrType,
     void *pFormatStruct,
     LPCSTR lpszStructType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
      void *pbFormat,
     DWORD *pcbFormat
    );
typedef LPVOID ( *PFN_CRYPT_ALLOC)(
     size_t cbSize
    );
typedef void ( *PFN_CRYPT_FREE)(
     LPVOID pv
    );
typedef struct _CRYPT_ENCODE_PARA {
    DWORD                   cbSize;
    PFN_CRYPT_ALLOC         pfnAlloc;
    PFN_CRYPT_FREE          pfnFree;
} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;

BOOL

CryptEncodeObjectEx(
     DWORD dwCertEncodingType,
     LPCSTR lpszStructType,
     const void *pvStructInfo,
     DWORD dwFlags,
     PCRYPT_ENCODE_PARA pEncodePara,
     void *pvEncoded,
      DWORD *pcbEncoded
    );

BOOL

CryptEncodeObject(
     DWORD dwCertEncodingType,
     LPCSTR lpszStructType,
     const void *pvStructInfo,
     BYTE *pbEncoded,
     DWORD *pcbEncoded
    );
typedef struct _CRYPT_DECODE_PARA {
    DWORD                   cbSize;
    PFN_CRYPT_ALLOC         pfnAlloc;
    PFN_CRYPT_FREE          pfnFree;
} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;

BOOL

CryptDecodeObjectEx(
     DWORD dwCertEncodingType,
     LPCSTR lpszStructType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     DWORD dwFlags,
     PCRYPT_DECODE_PARA pDecodePara,
     void *pvStructInfo,
      DWORD *pcbStructInfo
    );

BOOL

CryptDecodeObject(
     DWORD dwCertEncodingType,
     LPCSTR lpszStructType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     DWORD dwFlags,
     void *pvStructInfo,
     DWORD *pcbStructInfo
    );
typedef struct _CERT_EXTENSIONS {
    DWORD           cExtension;
    PCERT_EXTENSION rgExtension;
} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
    CRYPT_DATA_BLOB     KeyId;
    CERT_NAME_BLOB      CertIssuer;
    CRYPT_INTEGER_BLOB  CertSerialNumber;
} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
typedef struct _CERT_PRIVATE_KEY_VALIDITY {
    FILETIME            NotBefore;
    FILETIME            NotAfter;
} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
typedef struct _CERT_KEY_ATTRIBUTES_INFO {
    CRYPT_DATA_BLOB             KeyId;
    CRYPT_BIT_BLOB              IntendedKeyUsage;
    PCERT_PRIVATE_KEY_VALIDITY  pPrivateKeyUsagePeriod;
} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
typedef struct _CERT_POLICY_ID {
    DWORD                   cCertPolicyElementId;
    LPSTR                   *rgpszCertPolicyElementId;
} CERT_POLICY_ID, *PCERT_POLICY_ID;
typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
    DWORD                   cCertPolicyId;
    PCERT_POLICY_ID         rgCertPolicyId;
    CRYPT_BIT_BLOB          RestrictedKeyUsage;
} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;
typedef struct _CERT_OTHER_NAME {
    LPSTR               pszObjId;
    CRYPT_OBJID_BLOB    Value;
} CERT_OTHER_NAME, *PCERT_OTHER_NAME;
typedef struct _CERT_ALT_NAME_ENTRY {
    DWORD   dwAltNameChoice;
    union {
        PCERT_OTHER_NAME            pOtherName;
        LPWSTR                      pwszRfc822Name;
        LPWSTR                      pwszDNSName;
        CERT_NAME_BLOB              DirectoryName;
        LPWSTR                      pwszURL;
        CRYPT_DATA_BLOB             IPAddress;
        LPSTR                       pszRegisteredID;
    };
} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
typedef struct _CERT_ALT_NAME_INFO {
    DWORD                   cAltEntry;
    PCERT_ALT_NAME_ENTRY    rgAltEntry;
} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
    CRYPT_BIT_BLOB          SubjectType;
    BOOL                    fPathLenConstraint;
    DWORD                   dwPathLenConstraint;
    DWORD                   cSubtreesConstraint;
    CERT_NAME_BLOB          *rgSubtreesConstraint;
} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
    BOOL                    fCA;
    BOOL                    fPathLenConstraint;
    DWORD                   dwPathLenConstraint;
} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
typedef struct _CERT_POLICY_QUALIFIER_INFO {
    LPSTR                       pszPolicyQualifierId;
    CRYPT_OBJID_BLOB            Qualifier;
} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
typedef struct _CERT_POLICY_INFO {
    LPSTR                       pszPolicyIdentifier;
    DWORD                       cPolicyQualifier;
    CERT_POLICY_QUALIFIER_INFO  *rgPolicyQualifier;
} CERT_POLICY_INFO, *PCERT_POLICY_INFO;
typedef struct _CERT_POLICIES_INFO {
    DWORD                       cPolicyInfo;
    CERT_POLICY_INFO            *rgPolicyInfo;
} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;
typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
    LPSTR   pszOrganization;
    DWORD   cNoticeNumbers;
    int     *rgNoticeNumbers;
} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
    CERT_POLICY_QUALIFIER_NOTICE_REFERENCE  *pNoticeReference;
    LPWSTR                                  pszDisplayText;
} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;
typedef struct _CPS_URLS {
    LPWSTR                      pszURL;
    CRYPT_ALGORITHM_IDENTIFIER  *pAlgorithm;
    CRYPT_DATA_BLOB             *pDigest;
} CPS_URLS, *PCPS_URLS;
typedef struct _CERT_POLICY95_QUALIFIER1 {
    LPWSTR      pszPracticesReference;
    LPSTR       pszNoticeIdentifier;
    LPSTR       pszNSINoticeIdentifier;
    DWORD       cCPSURLs;
    CPS_URLS    *rgCPSURLs;
} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;
typedef struct _CERT_POLICY_MAPPING {
    LPSTR                       pszIssuerDomainPolicy;
    LPSTR                       pszSubjectDomainPolicy;
} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;
typedef struct _CERT_POLICY_MAPPINGS_INFO {
    DWORD                       cPolicyMapping;
    PCERT_POLICY_MAPPING        rgPolicyMapping;
} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;
typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
    BOOL                        fRequireExplicitPolicy;
    DWORD                       dwRequireExplicitPolicySkipCerts;
    BOOL                        fInhibitPolicyMapping;
    DWORD                       dwInhibitPolicyMappingSkipCerts;
} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
    LPSTR               pszObjId;
    DWORD               cValue;
    PCRYPT_DER_BLOB     rgValue;
} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
typedef struct _CRYPT_CONTENT_INFO {
    LPSTR               pszObjId;
    CRYPT_DER_BLOB      Content;
} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;
typedef struct _CRYPT_SEQUENCE_OF_ANY {
    DWORD               cValue;
    PCRYPT_DER_BLOB     rgValue;
} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
    CRYPT_DATA_BLOB     KeyId;
    CERT_ALT_NAME_INFO  AuthorityCertIssuer;
    CRYPT_INTEGER_BLOB  AuthorityCertSerialNumber;
} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;
typedef struct _CERT_ACCESS_DESCRIPTION {
    LPSTR               pszAccessMethod;
    CERT_ALT_NAME_ENTRY AccessLocation;
} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;
typedef struct _CERT_AUTHORITY_INFO_ACCESS {
    DWORD                       cAccDescr;
    PCERT_ACCESS_DESCRIPTION    rgAccDescr;
} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS,
  CERT_SUBJECT_INFO_ACCESS, *PCERT_SUBJECT_INFO_ACCESS;
typedef struct _CRL_DIST_POINT_NAME {
    DWORD   dwDistPointNameChoice;
    union {
        CERT_ALT_NAME_INFO      FullName;
    };
} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
typedef struct _CRL_DIST_POINT {
    CRL_DIST_POINT_NAME     DistPointName;
    CRYPT_BIT_BLOB          ReasonFlags;
    CERT_ALT_NAME_INFO      CRLIssuer;
} CRL_DIST_POINT, *PCRL_DIST_POINT;
typedef struct _CRL_DIST_POINTS_INFO {
    DWORD                   cDistPoint;
    PCRL_DIST_POINT         rgDistPoint;
} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
typedef struct _CROSS_CERT_DIST_POINTS_INFO {
    DWORD                   dwSyncDeltaTime;
    DWORD                   cDistPoint;
    PCERT_ALT_NAME_INFO     rgDistPoint;
} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;
typedef struct _CERT_PAIR {
   CERT_BLOB    Forward;
   CERT_BLOB    Reverse;
} CERT_PAIR, *PCERT_PAIR;
typedef struct _CRL_ISSUING_DIST_POINT {
    CRL_DIST_POINT_NAME     DistPointName;
    BOOL                    fOnlyContainsUserCerts;
    BOOL                    fOnlyContainsCACerts;
    CRYPT_BIT_BLOB          OnlySomeReasonFlags;
    BOOL                    fIndirectCRL;
} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
typedef struct _CERT_GENERAL_SUBTREE {
    CERT_ALT_NAME_ENTRY     Base;
    DWORD                   dwMinimum;
    BOOL                    fMaximum;
    DWORD                   dwMaximum;
} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;
typedef struct _CERT_NAME_CONSTRAINTS_INFO {
    DWORD                   cPermittedSubtree;
    PCERT_GENERAL_SUBTREE   rgPermittedSubtree;
    DWORD                   cExcludedSubtree;
    PCERT_GENERAL_SUBTREE   rgExcludedSubtree;
} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;
typedef struct _CERT_DSS_PARAMETERS {
    CRYPT_UINT_BLOB     p;
    CRYPT_UINT_BLOB     q;
    CRYPT_UINT_BLOB     g;
} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;
typedef struct _CERT_DH_PARAMETERS {
    CRYPT_UINT_BLOB     p;
    CRYPT_UINT_BLOB     g;
} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;
typedef struct _CERT_ECC_SIGNATURE {
    CRYPT_UINT_BLOB     r;
    CRYPT_UINT_BLOB     s;
} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;
typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
    CRYPT_BIT_BLOB      seed;
    DWORD               pgenCounter;
} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;
typedef struct _CERT_X942_DH_PARAMETERS {
    CRYPT_UINT_BLOB     p;
    CRYPT_UINT_BLOB     g;
    CRYPT_UINT_BLOB     q;
    CRYPT_UINT_BLOB     j;
    PCERT_X942_DH_VALIDATION_PARAMS pValidationParams;
} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;
typedef struct _CRYPT_X942_OTHER_INFO {
    LPSTR               pszContentEncryptionObjId;
    BYTE                rgbCounter[4];
    BYTE                rgbKeyLength[4];
    CRYPT_DATA_BLOB     PubInfo;
} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;
typedef struct _CRYPT_ECC_CMS_SHARED_INFO {
    CRYPT_ALGORITHM_IDENTIFIER  Algorithm;
    CRYPT_DATA_BLOB             EntityUInfo;
    BYTE                        rgbSuppPubInfo[4];
} CRYPT_ECC_CMS_SHARED_INFO, *PCRYPT_ECC_CMS_SHARED_INFO;
typedef struct _CRYPT_RC2_CBC_PARAMETERS {
    DWORD               dwVersion;
    BOOL                fIV;
    BYTE                rgbIV[8];
} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;
typedef struct _CRYPT_SMIME_CAPABILITY {
    LPSTR               pszObjId;
    CRYPT_OBJID_BLOB    Parameters;
} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;
typedef struct _CRYPT_SMIME_CAPABILITIES {
    DWORD                   cCapability;
    PCRYPT_SMIME_CAPABILITY rgCapability;
} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;
typedef struct _CERT_QC_STATEMENT {
    LPSTR               pszStatementId;
    CRYPT_OBJID_BLOB    StatementInfo;
} CERT_QC_STATEMENT, *PCERT_QC_STATEMENT;
typedef struct _CERT_QC_STATEMENTS_EXT_INFO {
    DWORD                   cStatement;
    PCERT_QC_STATEMENT      rgStatement;
} CERT_QC_STATEMENTS_EXT_INFO, *PCERT_QC_STATEMENTS_EXT_INFO;
typedef struct _CRYPT_MASK_GEN_ALGORITHM {
    LPSTR                       pszObjId;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
} CRYPT_MASK_GEN_ALGORITHM, *PCRYPT_MASK_GEN_ALGORITHM;
typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS {
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_MASK_GEN_ALGORITHM    MaskGenAlgorithm;
    DWORD                       dwSaltLength;
    DWORD                       dwTrailerField;
} CRYPT_RSA_SSA_PSS_PARAMETERS, *PCRYPT_RSA_SSA_PSS_PARAMETERS;
typedef struct _CRYPT_PSOURCE_ALGORITHM {
    LPSTR                       pszObjId;
    CRYPT_DATA_BLOB             EncodingParameters;
} CRYPT_PSOURCE_ALGORITHM, *PCRYPT_PSOURCE_ALGORITHM;
typedef struct _CRYPT_RSAES_OAEP_PARAMETERS {
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_MASK_GEN_ALGORITHM    MaskGenAlgorithm;
    CRYPT_PSOURCE_ALGORITHM     PSourceAlgorithm;
} CRYPT_RSAES_OAEP_PARAMETERS, *PCRYPT_RSAES_OAEP_PARAMETERS;
typedef struct _CMC_TAGGED_ATTRIBUTE {
    DWORD               dwBodyPartID;
    CRYPT_ATTRIBUTE     Attribute;
} CMC_TAGGED_ATTRIBUTE, *PCMC_TAGGED_ATTRIBUTE;
typedef struct _CMC_TAGGED_CERT_REQUEST {
    DWORD               dwBodyPartID;
    CRYPT_DER_BLOB      SignedCertRequest;
} CMC_TAGGED_CERT_REQUEST, *PCMC_TAGGED_CERT_REQUEST;
typedef struct _CMC_TAGGED_REQUEST {
    DWORD               dwTaggedRequestChoice;
    union {
        PCMC_TAGGED_CERT_REQUEST   pTaggedCertRequest;
    };
} CMC_TAGGED_REQUEST, *PCMC_TAGGED_REQUEST;
typedef struct _CMC_TAGGED_CONTENT_INFO {
    DWORD               dwBodyPartID;
    CRYPT_DER_BLOB      EncodedContentInfo;
} CMC_TAGGED_CONTENT_INFO, *PCMC_TAGGED_CONTENT_INFO;
typedef struct _CMC_TAGGED_OTHER_MSG {
    DWORD               dwBodyPartID;
    LPSTR               pszObjId;
    CRYPT_OBJID_BLOB    Value;
} CMC_TAGGED_OTHER_MSG, *PCMC_TAGGED_OTHER_MSG;
typedef struct _CMC_DATA_INFO {
    DWORD                       cTaggedAttribute;
    PCMC_TAGGED_ATTRIBUTE       rgTaggedAttribute;
    DWORD                       cTaggedRequest;
    PCMC_TAGGED_REQUEST         rgTaggedRequest;
    DWORD                       cTaggedContentInfo;
    PCMC_TAGGED_CONTENT_INFO    rgTaggedContentInfo;
    DWORD                       cTaggedOtherMsg;
    PCMC_TAGGED_OTHER_MSG       rgTaggedOtherMsg;
} CMC_DATA_INFO, *PCMC_DATA_INFO;
typedef struct _CMC_RESPONSE_INFO {
    DWORD                       cTaggedAttribute;
    PCMC_TAGGED_ATTRIBUTE       rgTaggedAttribute;
    DWORD                       cTaggedContentInfo;
    PCMC_TAGGED_CONTENT_INFO    rgTaggedContentInfo;
    DWORD                       cTaggedOtherMsg;
    PCMC_TAGGED_OTHER_MSG       rgTaggedOtherMsg;
} CMC_RESPONSE_INFO, *PCMC_RESPONSE_INFO;
typedef struct _CMC_PEND_INFO {
    CRYPT_DATA_BLOB             PendToken;
    FILETIME                    PendTime;
} CMC_PEND_INFO, *PCMC_PEND_INFO;
typedef struct _CMC_STATUS_INFO {
    DWORD                       dwStatus;
    DWORD                       cBodyList;
    DWORD                       *rgdwBodyList;
    LPWSTR                      pwszStatusString;
    DWORD                       dwOtherInfoChoice;
    union  {
        DWORD                       dwFailInfo;
        PCMC_PEND_INFO              pPendInfo;
    };
} CMC_STATUS_INFO, *PCMC_STATUS_INFO;
typedef struct _CMC_ADD_EXTENSIONS_INFO {
    DWORD                       dwCmcDataReference;
    DWORD                       cCertReference;
    DWORD                       *rgdwCertReference;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} CMC_ADD_EXTENSIONS_INFO, *PCMC_ADD_EXTENSIONS_INFO;
typedef struct _CMC_ADD_ATTRIBUTES_INFO {
    DWORD                       dwCmcDataReference;
    DWORD                       cCertReference;
    DWORD                       *rgdwCertReference;
    DWORD                       cAttribute;
    PCRYPT_ATTRIBUTE            rgAttribute;
} CMC_ADD_ATTRIBUTES_INFO, *PCMC_ADD_ATTRIBUTES_INFO;
typedef struct _CERT_TEMPLATE_EXT {
    LPSTR               pszObjId;
    DWORD               dwMajorVersion;
    BOOL                fMinorVersion;
    DWORD               dwMinorVersion;
} CERT_TEMPLATE_EXT, *PCERT_TEMPLATE_EXT;
typedef struct _CERT_HASHED_URL {
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_HASH_BLOB             Hash;
    LPWSTR                      pwszUrl;
} CERT_HASHED_URL, *PCERT_HASHED_URL;
typedef struct _CERT_LOGOTYPE_DETAILS {
    LPWSTR                      pwszMimeType;
    DWORD                       cHashedUrl;
    PCERT_HASHED_URL            rgHashedUrl;
} CERT_LOGOTYPE_DETAILS, *PCERT_LOGOTYPE_DETAILS;
typedef struct _CERT_LOGOTYPE_REFERENCE {
    DWORD                       cHashedUrl;
    PCERT_HASHED_URL            rgHashedUrl;
} CERT_LOGOTYPE_REFERENCE, *PCERT_LOGOTYPE_REFERENCE;
typedef struct _CERT_LOGOTYPE_IMAGE_INFO {
    DWORD                       dwLogotypeImageInfoChoice;
    DWORD                       dwFileSize;
    DWORD                       dwXSize;
    DWORD                       dwYSize;
    DWORD                       dwLogotypeImageResolutionChoice;
    union {
        DWORD                       dwNumBits;
        DWORD                       dwTableSize;
    };
    LPWSTR                      pwszLanguage;
} CERT_LOGOTYPE_IMAGE_INFO, *PCERT_LOGOTYPE_IMAGE_INFO;
typedef struct _CERT_LOGOTYPE_IMAGE {
    CERT_LOGOTYPE_DETAILS       LogotypeDetails;
    PCERT_LOGOTYPE_IMAGE_INFO   pLogotypeImageInfo;
} CERT_LOGOTYPE_IMAGE, *PCERT_LOGOTYPE_IMAGE;
typedef struct _CERT_LOGOTYPE_AUDIO_INFO {
    DWORD                       dwFileSize;
    DWORD                       dwPlayTime;
    DWORD                       dwChannels;
    DWORD                       dwSampleRate;
    LPWSTR                      pwszLanguage;
} CERT_LOGOTYPE_AUDIO_INFO, *PCERT_LOGOTYPE_AUDIO_INFO;
typedef struct _CERT_LOGOTYPE_AUDIO {
    CERT_LOGOTYPE_DETAILS       LogotypeDetails;
    PCERT_LOGOTYPE_AUDIO_INFO   pLogotypeAudioInfo;
} CERT_LOGOTYPE_AUDIO, *PCERT_LOGOTYPE_AUDIO;
typedef struct _CERT_LOGOTYPE_DATA {
    DWORD                       cLogotypeImage;
    PCERT_LOGOTYPE_IMAGE        rgLogotypeImage;
    DWORD                       cLogotypeAudio;
    PCERT_LOGOTYPE_AUDIO        rgLogotypeAudio;
} CERT_LOGOTYPE_DATA, *PCERT_LOGOTYPE_DATA;
typedef struct _CERT_LOGOTYPE_INFO {
    DWORD                       dwLogotypeInfoChoice;
    union {
        PCERT_LOGOTYPE_DATA         pLogotypeDirectInfo;
        PCERT_LOGOTYPE_REFERENCE    pLogotypeIndirectInfo;
    };
} CERT_LOGOTYPE_INFO, *PCERT_LOGOTYPE_INFO;
typedef struct _CERT_OTHER_LOGOTYPE_INFO {
    LPSTR                       pszObjId;
    CERT_LOGOTYPE_INFO          LogotypeInfo;
} CERT_OTHER_LOGOTYPE_INFO, *PCERT_OTHER_LOGOTYPE_INFO;
typedef struct _CERT_LOGOTYPE_EXT_INFO {
    DWORD                       cCommunityLogo;
    PCERT_LOGOTYPE_INFO         rgCommunityLogo;
    PCERT_LOGOTYPE_INFO         pIssuerLogo;
    PCERT_LOGOTYPE_INFO         pSubjectLogo;
    DWORD                       cOtherLogo;
    PCERT_OTHER_LOGOTYPE_INFO   rgOtherLogo;
} CERT_LOGOTYPE_EXT_INFO, *PCERT_LOGOTYPE_EXT_INFO;
typedef struct _CERT_BIOMETRIC_DATA {
    DWORD                       dwTypeOfBiometricDataChoice;
    union {
        DWORD                       dwPredefined;
        LPSTR                       pszObjId;
    };
    CERT_HASHED_URL             HashedUrl;
} CERT_BIOMETRIC_DATA, *PCERT_BIOMETRIC_DATA;
typedef struct _CERT_BIOMETRIC_EXT_INFO {
    DWORD                       cBiometricData;
    PCERT_BIOMETRIC_DATA        rgBiometricData;
} CERT_BIOMETRIC_EXT_INFO, *PCERT_BIOMETRIC_EXT_INFO;
typedef struct _OCSP_SIGNATURE_INFO {
    CRYPT_ALGORITHM_IDENTIFIER  SignatureAlgorithm;
    CRYPT_BIT_BLOB              Signature;
    DWORD                       cCertEncoded;
    PCERT_BLOB                  rgCertEncoded;
} OCSP_SIGNATURE_INFO, *POCSP_SIGNATURE_INFO;
typedef struct _OCSP_SIGNED_REQUEST_INFO {
    CRYPT_DER_BLOB              ToBeSigned;
    POCSP_SIGNATURE_INFO        pOptionalSignatureInfo;
} OCSP_SIGNED_REQUEST_INFO, *POCSP_SIGNED_REQUEST_INFO;
typedef struct _OCSP_CERT_ID {
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_HASH_BLOB             IssuerNameHash;
    CRYPT_HASH_BLOB             IssuerKeyHash;
    CRYPT_INTEGER_BLOB          SerialNumber;
} OCSP_CERT_ID, *POCSP_CERT_ID;
typedef struct _OCSP_REQUEST_ENTRY {
    OCSP_CERT_ID                CertId;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} OCSP_REQUEST_ENTRY, *POCSP_REQUEST_ENTRY;
typedef struct _OCSP_REQUEST_INFO {
    DWORD                       dwVersion;
    PCERT_ALT_NAME_ENTRY        pRequestorName;
    DWORD                       cRequestEntry;
    POCSP_REQUEST_ENTRY         rgRequestEntry;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} OCSP_REQUEST_INFO, *POCSP_REQUEST_INFO;
typedef struct _OCSP_RESPONSE_INFO {
    DWORD                       dwStatus;
    LPSTR                       pszObjId;
    CRYPT_OBJID_BLOB            Value;
} OCSP_RESPONSE_INFO, *POCSP_RESPONSE_INFO;
typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
    CRYPT_DER_BLOB              ToBeSigned;
    OCSP_SIGNATURE_INFO         SignatureInfo;
} OCSP_BASIC_SIGNED_RESPONSE_INFO, *POCSP_BASIC_SIGNED_RESPONSE_INFO;
typedef struct _OCSP_BASIC_REVOKED_INFO {
    FILETIME                    RevocationDate;
    DWORD                       dwCrlReasonCode;
} OCSP_BASIC_REVOKED_INFO, *POCSP_BASIC_REVOKED_INFO;
typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
    OCSP_CERT_ID                CertId;
    DWORD                       dwCertStatus;
    union {
        POCSP_BASIC_REVOKED_INFO    pRevokedInfo;
    };
    FILETIME                    ThisUpdate;
    FILETIME                    NextUpdate;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} OCSP_BASIC_RESPONSE_ENTRY, *POCSP_BASIC_RESPONSE_ENTRY;
typedef struct _OCSP_BASIC_RESPONSE_INFO {
    DWORD                       dwVersion;
    DWORD                       dwResponderIdChoice;
    union {
        CERT_NAME_BLOB              ByNameResponderId;
        CRYPT_HASH_BLOB              ByKeyResponderId;
    };
    FILETIME                    ProducedAt;
    DWORD                       cResponseEntry;
    POCSP_BASIC_RESPONSE_ENTRY  rgResponseEntry;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} OCSP_BASIC_RESPONSE_INFO, *POCSP_BASIC_RESPONSE_INFO;
typedef void *HCRYPTOIDFUNCSET;
typedef void *HCRYPTOIDFUNCADDR;
typedef struct _CRYPT_OID_FUNC_ENTRY {
    LPCSTR  pszOID;
    void    *pvFuncAddr;
} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;

BOOL

CryptInstallOIDFunctionAddress(
     HMODULE hModule,
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     DWORD cFuncEntry,
     const CRYPT_OID_FUNC_ENTRY rgFuncEntry[],
     DWORD dwFlags
    );

HCRYPTOIDFUNCSET

CryptInitOIDFunctionSet(
     LPCSTR pszFuncName,
     DWORD dwFlags
    );

BOOL

CryptGetOIDFunctionAddress(
     HCRYPTOIDFUNCSET hFuncSet,
     DWORD dwEncodingType,
     LPCSTR pszOID,
     DWORD dwFlags,
     void **ppvFuncAddr,
     HCRYPTOIDFUNCADDR *phFuncAddr
    );

BOOL

CryptGetDefaultOIDDllList(
     HCRYPTOIDFUNCSET hFuncSet,
     DWORD dwEncodingType,
      WCHAR *pwszDllList,
     DWORD *pcchDllList
    );

BOOL

CryptGetDefaultOIDFunctionAddress(
     HCRYPTOIDFUNCSET hFuncSet,
     DWORD dwEncodingType,
     LPCWSTR pwszDll,
     DWORD dwFlags,
     void **ppvFuncAddr,
     HCRYPTOIDFUNCADDR *phFuncAddr
    );

BOOL

CryptFreeOIDFunctionAddress(
     HCRYPTOIDFUNCADDR hFuncAddr,
     DWORD dwFlags
    );

BOOL

CryptRegisterOIDFunction(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID,
     LPCWSTR pwszDll,
     LPCSTR pszOverrideFuncName
    );

BOOL

CryptUnregisterOIDFunction(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID
    );

BOOL

CryptRegisterDefaultOIDFunction(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     DWORD dwIndex,
     LPCWSTR pwszDll
    );

BOOL

CryptUnregisterDefaultOIDFunction(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCWSTR pwszDll
    );

BOOL

CryptSetOIDFunctionValue(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID,
     LPCWSTR pwszValueName,
     DWORD dwValueType,
     const BYTE *pbValueData,
     DWORD cbValueData
    );

BOOL

CryptGetOIDFunctionValue(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID,
     LPCWSTR pwszValueName,
     DWORD *pdwValueType,
     BYTE *pbValueData,
     DWORD *pcbValueData
    );
typedef BOOL ( *PFN_CRYPT_ENUM_OID_FUNC)(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID,
     DWORD cValue,
     const DWORD rgdwValueType[],
     LPCWSTR const rgpwszValueName[],
     const BYTE * const rgpbValueData[],
     const DWORD rgcbValueData[],
     void *pvArg
    );

BOOL

CryptEnumOIDFunction(
     DWORD dwEncodingType,
     LPCSTR pszFuncName,
     LPCSTR pszOID,
     DWORD dwFlags,
     void *pvArg,
     PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc
    );
typedef struct _CRYPT_OID_INFO {
    DWORD           cbSize;
    LPCSTR          pszOID;
    LPCWSTR         pwszName;
    DWORD           dwGroupId;
    union {
        DWORD       dwValue;
        ALG_ID      Algid;
        DWORD       dwLength;
    };
    CRYPT_DATA_BLOB ExtraInfo;
} CRYPT_OID_INFO, *PCRYPT_OID_INFO;
typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;

PCCRYPT_OID_INFO

CryptFindOIDInfo(
     DWORD dwKeyType,
     void *pvKey,
     DWORD dwGroupId
    );

BOOL

CryptRegisterOIDInfo(
     PCCRYPT_OID_INFO pInfo,
     DWORD dwFlags
    );

BOOL

CryptUnregisterOIDInfo(
     PCCRYPT_OID_INFO pInfo
    );
typedef BOOL ( *PFN_CRYPT_ENUM_OID_INFO)(
     PCCRYPT_OID_INFO pInfo,
     void *pvArg
    );

BOOL

CryptEnumOIDInfo(
     DWORD dwGroupId,
     DWORD dwFlags,
     void *pvArg,
     PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo
    );

LPCWSTR

CryptFindLocalizedName(
     LPCWSTR pwszCryptName
    );
typedef void *HCRYPTMSG;
typedef struct _CERT_ISSUER_SERIAL_NUMBER {
    CERT_NAME_BLOB      Issuer;
    CRYPT_INTEGER_BLOB  SerialNumber;
} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
typedef struct _CERT_ID {
    DWORD   dwIdChoice;
    union {
        CERT_ISSUER_SERIAL_NUMBER   IssuerSerialNumber;
        CRYPT_HASH_BLOB             KeyId;
        CRYPT_HASH_BLOB             HashId;
    };
} CERT_ID, *PCERT_ID;
typedef struct _CMSG_SIGNER_ENCODE_INFO {
    DWORD                       cbSize;
    PCERT_INFO                  pCertInfo;
    union {
        HCRYPTPROV                  hCryptProv;
        NCRYPT_KEY_HANDLE           hNCryptKey;
    };
    DWORD                       dwKeySpec;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    void                        *pvHashAuxInfo;
    DWORD                       cAuthAttr;
    PCRYPT_ATTRIBUTE            rgAuthAttr;
    DWORD                       cUnauthAttr;
    PCRYPT_ATTRIBUTE            rgUnauthAttr;
} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;
typedef struct _CMSG_SIGNED_ENCODE_INFO {
    DWORD                       cbSize;
    DWORD                       cSigners;
    PCMSG_SIGNER_ENCODE_INFO    rgSigners;
    DWORD                       cCertEncoded;
    PCERT_BLOB                  rgCertEncoded;
    DWORD                       cCrlEncoded;
    PCRL_BLOB                   rgCrlEncoded;
} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;
typedef struct _CMSG_RECIPIENT_ENCODE_INFO CMSG_RECIPIENT_ENCODE_INFO,
    *PCMSG_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
    DWORD                       cbSize;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
    void                        *pvEncryptionAuxInfo;
    DWORD                       cRecipients;
    PCERT_INFO                  *rgpRecipients;
} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
    DWORD                       cbSize;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    void                        *pvKeyEncryptionAuxInfo;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_BIT_BLOB              RecipientPublicKey;
    CERT_ID                     RecipientId;
} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
    DWORD                       cbSize;
    CRYPT_BIT_BLOB              RecipientPublicKey;
    CERT_ID                     RecipientId;
    FILETIME                    Date;
    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
    *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
    DWORD                       cbSize;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    void                        *pvKeyEncryptionAuxInfo;
    CRYPT_ALGORITHM_IDENTIFIER  KeyWrapAlgorithm;
    void                        *pvKeyWrapAuxInfo;
    HCRYPTPROV_LEGACY           hCryptProv;
    DWORD                       dwKeySpec;
    DWORD                       dwKeyChoice;
    union {
        PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
        PCERT_ID                    pSenderId;
    };
    CRYPT_DATA_BLOB             UserKeyingMaterial;
    DWORD                                       cRecipientEncryptedKeys;
    PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO   *rgpRecipientEncryptedKeys;
} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
    DWORD                       cbSize;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    void                        *pvKeyEncryptionAuxInfo;
    HCRYPTPROV                  hCryptProv;
    DWORD                       dwKeyChoice;
    union {
        HCRYPTKEY                   hKeyEncryptionKey;
        void                        *pvKeyEncryptionKey;
    };
    CRYPT_DATA_BLOB             KeyId;
    FILETIME                    Date;
    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
struct _CMSG_RECIPIENT_ENCODE_INFO {
    DWORD   dwRecipientChoice;
    union {
        PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO   pKeyTrans;
        PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO   pKeyAgree;
        PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO   pMailList;
    };
};
typedef struct _CMSG_RC2_AUX_INFO {
    DWORD                       cbSize;
    DWORD                       dwBitLen;
} CMSG_RC2_AUX_INFO, *PCMSG_RC2_AUX_INFO;
typedef struct _CMSG_SP3_COMPATIBLE_AUX_INFO {
    DWORD                       cbSize;
    DWORD                       dwFlags;
} CMSG_SP3_COMPATIBLE_AUX_INFO, *PCMSG_SP3_COMPATIBLE_AUX_INFO;
typedef struct _CMSG_RC4_AUX_INFO {
    DWORD                       cbSize;
    DWORD                       dwBitLen;
} CMSG_RC4_AUX_INFO, *PCMSG_RC4_AUX_INFO;
typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
    DWORD                       cbSize;
    CMSG_SIGNED_ENCODE_INFO     SignedInfo;
    CMSG_ENVELOPED_ENCODE_INFO  EnvelopedInfo;
} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO, *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
typedef struct _CMSG_HASHED_ENCODE_INFO {
    DWORD                       cbSize;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    void                        *pvHashAuxInfo;
} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;
typedef struct _CMSG_ENCRYPTED_ENCODE_INFO {
    DWORD                       cbSize;
    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
    void                        *pvEncryptionAuxInfo;
} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;
typedef BOOL ( *PFN_CMSG_STREAM_OUTPUT)(
     const void *pvArg,
     BYTE *pbData,
     DWORD cbData,
     BOOL fFinal
    );
typedef struct _CMSG_STREAM_INFO {
    DWORD                   cbContent;
    PFN_CMSG_STREAM_OUTPUT  pfnStreamOutput;
    void                    *pvArg;
} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;

HCRYPTMSG

CryptMsgOpenToEncode(
     DWORD dwMsgEncodingType,
     DWORD dwFlags,
     DWORD dwMsgType,
     void const *pvMsgEncodeInfo,
     LPSTR pszInnerContentObjID,
     PCMSG_STREAM_INFO pStreamInfo
    );

DWORD

CryptMsgCalculateEncodedLength(
     DWORD dwMsgEncodingType,
     DWORD dwFlags,
     DWORD dwMsgType,
     void const *pvMsgEncodeInfo,
     LPSTR pszInnerContentObjID,
     DWORD cbData
    );

HCRYPTMSG

CryptMsgOpenToDecode(
     DWORD dwMsgEncodingType,
     DWORD dwFlags,
     DWORD dwMsgType,
     HCRYPTPROV_LEGACY hCryptProv,
     PCERT_INFO pRecipientInfo,
     PCMSG_STREAM_INFO pStreamInfo
    );

HCRYPTMSG

CryptMsgDuplicate(
     HCRYPTMSG hCryptMsg
    );

BOOL

CryptMsgClose(
     HCRYPTMSG hCryptMsg
    );

BOOL

CryptMsgUpdate(
     HCRYPTMSG hCryptMsg,
     const BYTE *pbData,
     DWORD cbData,
     BOOL fFinal
    );

BOOL

CryptMsgGetParam(
     HCRYPTMSG hCryptMsg,
     DWORD dwParamType,
     DWORD dwIndex,
     void *pvData,
     DWORD *pcbData
    );
typedef struct _CMSG_SIGNER_INFO {
    DWORD                       dwVersion;
    CERT_NAME_BLOB              Issuer;
    CRYPT_INTEGER_BLOB          SerialNumber;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_ALGORITHM_IDENTIFIER  HashEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedHash;
    CRYPT_ATTRIBUTES            AuthAttrs;
    CRYPT_ATTRIBUTES            UnauthAttrs;
} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
typedef struct _CMSG_CMS_SIGNER_INFO {
    DWORD                       dwVersion;
    CERT_ID                     SignerId;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    CRYPT_ALGORITHM_IDENTIFIER  HashEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedHash;
    CRYPT_ATTRIBUTES            AuthAttrs;
    CRYPT_ATTRIBUTES            UnauthAttrs;
} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;
typedef CRYPT_ATTRIBUTES CMSG_ATTR;
typedef CRYPT_ATTRIBUTES *PCMSG_ATTR;
typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
    DWORD                       dwVersion;
    CERT_ID                     RecipientId;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedKey;
} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;
typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
    CERT_ID                     RecipientId;
    CRYPT_DATA_BLOB             EncryptedKey;
    FILETIME                    Date;
    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
    DWORD                       dwVersion;
    DWORD                       dwOriginatorChoice;
    union {
        CERT_ID                     OriginatorCertId;
        CERT_PUBLIC_KEY_INFO        OriginatorPublicKeyInfo;
    };
    CRYPT_DATA_BLOB             UserKeyingMaterial;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    DWORD                                cRecipientEncryptedKeys;
    PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO   *rgpRecipientEncryptedKeys;
} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;
typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
    DWORD                       dwVersion;
    CRYPT_DATA_BLOB             KeyId;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedKey;
    FILETIME                    Date;
    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;
typedef struct _CMSG_CMS_RECIPIENT_INFO {
    DWORD   dwRecipientChoice;
    union {
        PCMSG_KEY_TRANS_RECIPIENT_INFO   pKeyTrans;
        PCMSG_KEY_AGREE_RECIPIENT_INFO   pKeyAgree;
        PCMSG_MAIL_LIST_RECIPIENT_INFO   pMailList;
    };
} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;

BOOL

CryptMsgControl(
     HCRYPTMSG hCryptMsg,
     DWORD dwFlags,
     DWORD dwCtrlType,
     void const *pvCtrlPara
    );
typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
    DWORD               cbSize;
    HCRYPTPROV_LEGACY   hCryptProv;
    DWORD               dwSignerIndex;
    DWORD               dwSignerType;
    void                *pvSigner;
} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
typedef struct _CMSG_CTRL_DECRYPT_PARA {
    DWORD       cbSize;
    union {
        HCRYPTPROV                  hCryptProv;
        NCRYPT_KEY_HANDLE           hNCryptKey;
    };
    DWORD       dwKeySpec;
    DWORD       dwRecipientIndex;
} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
    DWORD                           cbSize;
    union {
        HCRYPTPROV                  hCryptProv;
        NCRYPT_KEY_HANDLE           hNCryptKey;
    };
    DWORD                           dwKeySpec;
    PCMSG_KEY_TRANS_RECIPIENT_INFO  pKeyTrans;
    DWORD                           dwRecipientIndex;
} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
typedef struct _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
    DWORD                           cbSize;
    union {
        HCRYPTPROV                  hCryptProv;
        NCRYPT_KEY_HANDLE           hNCryptKey;
    };
    DWORD                           dwKeySpec;
    PCMSG_KEY_AGREE_RECIPIENT_INFO  pKeyAgree;
    DWORD                           dwRecipientIndex;
    DWORD                           dwRecipientEncryptedKeyIndex;
    CRYPT_BIT_BLOB                  OriginatorPublicKey;
} CMSG_CTRL_KEY_AGREE_DECRYPT_PARA, *PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA;
typedef struct _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA {
    DWORD                           cbSize;
    HCRYPTPROV                      hCryptProv;
    PCMSG_MAIL_LIST_RECIPIENT_INFO  pMailList;
    DWORD                           dwRecipientIndex;
    DWORD                           dwKeyChoice;
    union {
        HCRYPTKEY                       hKeyEncryptionKey;
        void                            *pvKeyEncryptionKey;
    };
} CMSG_CTRL_MAIL_LIST_DECRYPT_PARA, *PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA;
typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA {
    DWORD               cbSize;
    DWORD               dwSignerIndex;
    CRYPT_DATA_BLOB     blob;
} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA, *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA {
    DWORD               cbSize;
    DWORD               dwSignerIndex;
    DWORD               dwUnauthAttrIndex;
} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA, *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
BOOL

CryptMsgVerifyCountersignatureEncoded(
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwEncodingType,
     PBYTE pbSignerInfo,
     DWORD cbSignerInfo,
     PBYTE pbSignerInfoCountersignature,
     DWORD cbSignerInfoCountersignature,
     PCERT_INFO pciCountersigner
    );
BOOL

CryptMsgVerifyCountersignatureEncodedEx(
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwEncodingType,
     PBYTE pbSignerInfo,
     DWORD cbSignerInfo,
     PBYTE pbSignerInfoCountersignature,
     DWORD cbSignerInfoCountersignature,
     DWORD dwSignerType,
     void *pvSigner,
     DWORD dwFlags,
     void *pvReserved
    );
BOOL

CryptMsgCountersign(
     HCRYPTMSG hCryptMsg,
     DWORD dwIndex,
     DWORD cCountersigners,
     PCMSG_SIGNER_ENCODE_INFO rgCountersigners
    );
BOOL

CryptMsgCountersignEncoded(
     DWORD dwEncodingType,
     PBYTE pbSignerInfo,
     DWORD cbSignerInfo,
     DWORD cCountersigners,
     PCMSG_SIGNER_ENCODE_INFO rgCountersigners,
     PBYTE pbCountersignature,
     PDWORD pcbCountersignature
    );
typedef void * ( *PFN_CMSG_ALLOC) (
     size_t cb
    );
typedef void ( *PFN_CMSG_FREE)(
     void *pv
    );
typedef  BOOL ( *PFN_CMSG_GEN_ENCRYPT_KEY) (
     HCRYPTPROV *phCryptProv,
     PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,
     PVOID pvEncryptAuxInfo,
     PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
     PFN_CMSG_ALLOC pfnAlloc,
     HCRYPTKEY *phEncryptKey,
     PBYTE *ppbEncryptParameters,
     PDWORD pcbEncryptParameters
    );
typedef BOOL ( *PFN_CMSG_EXPORT_ENCRYPT_KEY) (
     HCRYPTPROV hCryptProv,
     HCRYPTKEY hEncryptKey,
     PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
     PBYTE pbData,
     PDWORD pcbData
    );
typedef BOOL ( *PFN_CMSG_IMPORT_ENCRYPT_KEY) (
     HCRYPTPROV hCryptProv,
     DWORD dwKeySpec,
     PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,
     PCRYPT_ALGORITHM_IDENTIFIER paiPubKey,
     PBYTE pbEncodedKey,
     DWORD cbEncodedKey,
     HCRYPTKEY *phEncryptKey
    );
typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
    DWORD                       cbSize;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
    void                        *pvEncryptionAuxInfo;
    DWORD                       cRecipients;
    PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
    PFN_CMSG_ALLOC              pfnAlloc;
    PFN_CMSG_FREE               pfnFree;
    DWORD                       dwEncryptFlags;
    union {
        HCRYPTKEY                   hContentEncryptKey;
        BCRYPT_KEY_HANDLE           hCNGContentEncryptKey;
    };
    DWORD                       dwFlags;
    BOOL                        fCNG;
    BYTE                        *pbCNGContentEncryptKeyObject;
    BYTE                        *pbContentEncryptKey;
    DWORD                       cbContentEncryptKey;
} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
typedef BOOL ( *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY) (
     PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
     DWORD dwFlags,
     void *pvReserved
    );
typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
    DWORD                       cbSize;
    DWORD                       dwRecipientIndex;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedKey;
    DWORD                       dwFlags;
} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;
typedef BOOL ( *PFN_CMSG_EXPORT_KEY_TRANS) (
     PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
     PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
     PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
     DWORD dwFlags,
     void *pvReserved
    );
typedef struct _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
    DWORD                       cbSize;
    CRYPT_DATA_BLOB             EncryptedKey;
} CMSG_KEY_AGREE_KEY_ENCRYPT_INFO, *PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO;
typedef struct _CMSG_KEY_AGREE_ENCRYPT_INFO {
    DWORD                       cbSize;
    DWORD                       dwRecipientIndex;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    CRYPT_DATA_BLOB             UserKeyingMaterial;
    DWORD                       dwOriginatorChoice;
    union {
        CERT_ID                     OriginatorCertId;
        CERT_PUBLIC_KEY_INFO        OriginatorPublicKeyInfo;
    };
    DWORD                       cKeyAgreeKeyEncryptInfo;
    PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO *rgpKeyAgreeKeyEncryptInfo;
    DWORD                       dwFlags;
} CMSG_KEY_AGREE_ENCRYPT_INFO, *PCMSG_KEY_AGREE_ENCRYPT_INFO;
typedef BOOL ( *PFN_CMSG_EXPORT_KEY_AGREE) (
     PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
     PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo,
     PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo,
     DWORD dwFlags,
     void *pvReserved
    );
typedef struct _CMSG_MAIL_LIST_ENCRYPT_INFO {
    DWORD                       cbSize;
    DWORD                       dwRecipientIndex;
    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
    CRYPT_DATA_BLOB             EncryptedKey;
    DWORD                       dwFlags;
} CMSG_MAIL_LIST_ENCRYPT_INFO, *PCMSG_MAIL_LIST_ENCRYPT_INFO;
typedef BOOL ( *PFN_CMSG_EXPORT_MAIL_LIST) (
     PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
     PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailListEncodeInfo,
     PCMSG_MAIL_LIST_ENCRYPT_INFO pMailListEncryptInfo,
     DWORD dwFlags,
     void *pvReserved
    );
typedef BOOL ( *PFN_CMSG_IMPORT_KEY_TRANS) (
     PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
     PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,
     DWORD dwFlags,
     void *pvReserved,
     HCRYPTKEY *phContentEncryptKey
    );
typedef BOOL ( *PFN_CMSG_IMPORT_KEY_AGREE) (
     PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
     PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,
     DWORD dwFlags,
     void *pvReserved,
     HCRYPTKEY *phContentEncryptKey
    );
typedef BOOL ( *PFN_CMSG_IMPORT_MAIL_LIST) (
     PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
     PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA pMailListDecryptPara,
     DWORD dwFlags,
     void *pvReserved,
     HCRYPTKEY *phContentEncryptKey
    );
typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO {
    DWORD                       cbSize;
    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
    PFN_CMSG_ALLOC              pfnAlloc;
    PFN_CMSG_FREE               pfnFree;
    NCRYPT_KEY_HANDLE           hNCryptKey;
    BYTE                        *pbContentEncryptKey;
    DWORD                       cbContentEncryptKey;
    BCRYPT_KEY_HANDLE           hCNGContentEncryptKey;
    BYTE                        *pbCNGContentEncryptKeyObject;
} CMSG_CNG_CONTENT_DECRYPT_INFO, *PCMSG_CNG_CONTENT_DECRYPT_INFO;
typedef BOOL ( *PFN_CMSG_CNG_IMPORT_KEY_TRANS) (
     PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
     PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,
     DWORD dwFlags,
     void *pvReserved
    );
typedef BOOL ( *PFN_CMSG_CNG_IMPORT_KEY_AGREE) (
     PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
     PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,
     DWORD dwFlags,
     void *pvReserved
    );
typedef BOOL ( *PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY) (
     PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
     DWORD dwFlags,
     void *pvReserved
    );
typedef void *HCERTSTORE;
typedef struct _CERT_CONTEXT {
    DWORD                   dwCertEncodingType;
    BYTE                    *pbCertEncoded;
    DWORD                   cbCertEncoded;
    PCERT_INFO              pCertInfo;
    HCERTSTORE              hCertStore;
} CERT_CONTEXT, *PCERT_CONTEXT;
typedef const CERT_CONTEXT *PCCERT_CONTEXT;
typedef struct _CRL_CONTEXT {
    DWORD                   dwCertEncodingType;
    BYTE                    *pbCrlEncoded;
    DWORD                   cbCrlEncoded;
    PCRL_INFO               pCrlInfo;
    HCERTSTORE              hCertStore;
} CRL_CONTEXT, *PCRL_CONTEXT;
typedef const CRL_CONTEXT *PCCRL_CONTEXT;
typedef struct _CTL_CONTEXT {
    DWORD                   dwMsgAndCertEncodingType;
    BYTE                    *pbCtlEncoded;
    DWORD                   cbCtlEncoded;
    PCTL_INFO               pCtlInfo;
    HCERTSTORE              hCertStore;
    HCRYPTMSG               hCryptMsg;
    BYTE                    *pbCtlContent;
    DWORD                   cbCtlContent;
} CTL_CONTEXT, *PCTL_CONTEXT;
typedef const CTL_CONTEXT *PCCTL_CONTEXT;
typedef struct _CRYPT_KEY_PROV_PARAM {
    DWORD           dwParam;
    BYTE            *pbData;
    DWORD           cbData;
    DWORD           dwFlags;
} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
typedef struct _CRYPT_KEY_PROV_INFO {
    LPWSTR                  pwszContainerName;
    LPWSTR                  pwszProvName;
    DWORD                   dwProvType;
    DWORD                   dwFlags;
    DWORD                   cProvParam;
    PCRYPT_KEY_PROV_PARAM   rgProvParam;
    DWORD                   dwKeySpec;
} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
typedef struct _CERT_KEY_CONTEXT {
    DWORD           cbSize;
    union {
        HCRYPTPROV          hCryptProv;
        NCRYPT_KEY_HANDLE   hNCryptKey;
    };
    DWORD           dwKeySpec;
} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
typedef struct _ROOT_INFO_LUID {
    DWORD LowPart;
    LONG HighPart;
} ROOT_INFO_LUID, *PROOT_INFO_LUID;
typedef struct _CRYPT_SMART_CARD_ROOT_INFO {
    BYTE                rgbCardID [16];
    ROOT_INFO_LUID      luid;
} CRYPT_SMART_CARD_ROOT_INFO, *PCRYPT_SMART_CARD_ROOT_INFO;
typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
    union {
        HKEY                hKeyBase;
        void                *pvBase;
    };
    union {
        void                *pvSystemStore;
        LPCSTR              pszSystemStore;
        LPCWSTR             pwszSystemStore;
    };
} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
typedef struct _CERT_REGISTRY_STORE_CLIENT_GPT_PARA {
    HKEY                hKeyBase;
    LPWSTR              pwszRegPath;
} CERT_REGISTRY_STORE_CLIENT_GPT_PARA, *PCERT_REGISTRY_STORE_CLIENT_GPT_PARA;
typedef struct _CERT_REGISTRY_STORE_ROAMING_PARA {
    HKEY                hKey;
    LPWSTR              pwszStoreDirectory;
} CERT_REGISTRY_STORE_ROAMING_PARA, *PCERT_REGISTRY_STORE_ROAMING_PARA;
typedef struct _CERT_LDAP_STORE_OPENED_PARA {
    void        *pvLdapSessionHandle;
    LPCWSTR     pwszLdapUrl;
} CERT_LDAP_STORE_OPENED_PARA, *PCERT_LDAP_STORE_OPENED_PARA;

HCERTSTORE

CertOpenStore(
     LPCSTR lpszStoreProvider,
     DWORD dwEncodingType,
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwFlags,
     const void *pvPara
    );
typedef void *HCERTSTOREPROV;
typedef struct _CERT_STORE_PROV_INFO {
    DWORD               cbSize;
    DWORD               cStoreProvFunc;
    void                **rgpvStoreProvFunc;
    HCERTSTOREPROV      hStoreProv;
    DWORD               dwStoreProvFlags;
    HCRYPTOIDFUNCADDR   hStoreProvFuncAddr2;
} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
typedef BOOL ( *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
     LPCSTR lpszStoreProvider,
     DWORD dwEncodingType,
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwFlags,
     const void *pvPara,
     HCERTSTORE hCertStore,
     PCERT_STORE_PROV_INFO pStoreProvInfo
    );
typedef void ( *PFN_CERT_STORE_PROV_CLOSE)(
     HCERTSTOREPROV hStoreProv,
     DWORD dwFlags
    );
typedef  BOOL ( *PFN_CERT_STORE_PROV_READ_CERT)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pStoreCertContext,
     DWORD dwFlags,
     PCCERT_CONTEXT *ppProvCertContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_WRITE_CERT)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pCertContext,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_DELETE_CERT)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pCertContext,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pCertContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );
typedef  BOOL ( *PFN_CERT_STORE_PROV_READ_CRL)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pStoreCrlContext,
     DWORD dwFlags,
     PCCRL_CONTEXT *ppProvCrlContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_WRITE_CRL)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_DELETE_CRL)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );
typedef  BOOL ( *PFN_CERT_STORE_PROV_READ_CTL)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pStoreCtlContext,
     DWORD dwFlags,
     PCCTL_CONTEXT *ppProvCtlContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_WRITE_CTL)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_DELETE_CTL)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwFlags
                                                     );
typedef BOOL ( *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_CONTROL)(
     HCERTSTOREPROV hStoreProv,
     DWORD dwFlags,
     DWORD dwCtrlType,
     void const *pvCtrlPara
    );
typedef struct _CERT_STORE_PROV_FIND_INFO {
    DWORD               cbSize;
    DWORD               dwMsgAndCertEncodingType;
    DWORD               dwFindFlags;
    DWORD               dwFindType;
    const void          *pvFindPara;
} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
*PCCERT_STORE_PROV_FIND_INFO;
typedef  BOOL ( *PFN_CERT_STORE_PROV_FIND_CERT)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_STORE_PROV_FIND_INFO pFindInfo,
     PCCERT_CONTEXT pPrevCertContext,
     DWORD dwFlags,
     void **ppvStoreProvFindInfo,
     PCCERT_CONTEXT *ppProvCertContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pCertContext,
     void *pvStoreProvFindInfo,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_CONTEXT pCertContext,
     DWORD dwPropId,
     DWORD dwFlags,
     void *pvData,
     DWORD *pcbData
    );
typedef  BOOL ( *PFN_CERT_STORE_PROV_FIND_CRL)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_STORE_PROV_FIND_INFO pFindInfo,
     PCCRL_CONTEXT pPrevCrlContext,
     DWORD dwFlags,
     void **ppvStoreProvFindInfo,
     PCCRL_CONTEXT *ppProvCrlContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pCrlContext,
     void *pvStoreProvFindInfo,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     void *pvData,
     DWORD *pcbData
    );
typedef  BOOL ( *PFN_CERT_STORE_PROV_FIND_CTL)(
     HCERTSTOREPROV hStoreProv,
     PCCERT_STORE_PROV_FIND_INFO pFindInfo,
     PCCTL_CONTEXT pPrevCtlContext,
     DWORD dwFlags,
     void **ppvStoreProvFindInfo,
     PCCTL_CONTEXT *ppProvCtlContext
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_FREE_FIND_CTL)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pCtlContext,
     void *pvStoreProvFindInfo,
     DWORD dwFlags
    );
typedef BOOL ( *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
     HCERTSTOREPROV hStoreProv,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     void *pvData,
     DWORD *pcbData
    );

HCERTSTORE

CertDuplicateStore(
     HCERTSTORE hCertStore
    );

BOOL

CertSaveStore(
     HCERTSTORE hCertStore,
     DWORD dwEncodingType,
     DWORD dwSaveAs,
     DWORD dwSaveTo,
     void *pvSaveToPara,
     DWORD dwFlags
    );

BOOL

CertCloseStore(
     HCERTSTORE hCertStore,
     DWORD dwFlags
    );

PCCERT_CONTEXT

CertGetSubjectCertificateFromStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     PCERT_INFO pCertId
    );

PCCERT_CONTEXT

CertEnumCertificatesInStore(
     HCERTSTORE hCertStore,
     PCCERT_CONTEXT pPrevCertContext
    );

PCCERT_CONTEXT

CertFindCertificateInStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     DWORD dwFindFlags,
     DWORD dwFindType,
     const void *pvFindPara,
     PCCERT_CONTEXT pPrevCertContext
    );

PCCERT_CONTEXT

CertGetIssuerCertificateFromStore(
     HCERTSTORE hCertStore,
     PCCERT_CONTEXT pSubjectContext,
     PCCERT_CONTEXT pPrevIssuerContext,
     DWORD *pdwFlags
    );

BOOL

CertVerifySubjectCertificateContext(
     PCCERT_CONTEXT pSubject,
     PCCERT_CONTEXT pIssuer,
     DWORD *pdwFlags
    );

PCCERT_CONTEXT

CertDuplicateCertificateContext(
     PCCERT_CONTEXT pCertContext
    );

PCCERT_CONTEXT

CertCreateCertificateContext(
     DWORD dwCertEncodingType,
     const BYTE *pbCertEncoded,
     DWORD cbCertEncoded
    );

BOOL

CertFreeCertificateContext(
     PCCERT_CONTEXT pCertContext
    );

BOOL

CertSetCertificateContextProperty(
     PCCERT_CONTEXT pCertContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );

BOOL

CertGetCertificateContextProperty(
     PCCERT_CONTEXT pCertContext,
     DWORD dwPropId,
     void *pvData,
     DWORD *pcbData
    );

DWORD

CertEnumCertificateContextProperties(
     PCCERT_CONTEXT pCertContext,
     DWORD dwPropId
    );

BOOL

CertCreateCTLEntryFromCertificateContextProperties(
     PCCERT_CONTEXT pCertContext,
     DWORD cOptAttr,
     PCRYPT_ATTRIBUTE rgOptAttr,
     DWORD dwFlags,
     void *pvReserved,
     PCTL_ENTRY pCtlEntry,
     DWORD *pcbCtlEntry
    );

BOOL

CertSetCertificateContextPropertiesFromCTLEntry(
     PCCERT_CONTEXT pCertContext,
     PCTL_ENTRY pCtlEntry,
     DWORD dwFlags
    );

PCCRL_CONTEXT

CertGetCRLFromStore(
     HCERTSTORE hCertStore,
     PCCERT_CONTEXT pIssuerContext,
     PCCRL_CONTEXT pPrevCrlContext,
     DWORD *pdwFlags
    );

PCCRL_CONTEXT

CertEnumCRLsInStore(
     HCERTSTORE hCertStore,
     PCCRL_CONTEXT pPrevCrlContext
    );

PCCRL_CONTEXT

CertFindCRLInStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     DWORD dwFindFlags,
     DWORD dwFindType,
     const void *pvFindPara,
     PCCRL_CONTEXT pPrevCrlContext
    );
typedef struct _CRL_FIND_ISSUED_FOR_PARA {
    PCCERT_CONTEXT              pSubjectCert;
    PCCERT_CONTEXT              pIssuerCert;
} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;

PCCRL_CONTEXT

CertDuplicateCRLContext(
     PCCRL_CONTEXT pCrlContext
    );

PCCRL_CONTEXT

CertCreateCRLContext(
     DWORD dwCertEncodingType,
     const BYTE *pbCrlEncoded,
     DWORD cbCrlEncoded
    );

BOOL

CertFreeCRLContext(
     PCCRL_CONTEXT pCrlContext
    );

BOOL

CertSetCRLContextProperty(
     PCCRL_CONTEXT pCrlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );

BOOL

CertGetCRLContextProperty(
     PCCRL_CONTEXT pCrlContext,
     DWORD dwPropId,
     void *pvData,
     DWORD *pcbData
    );

DWORD

CertEnumCRLContextProperties(
     PCCRL_CONTEXT pCrlContext,
     DWORD dwPropId
    );

BOOL

CertFindCertificateInCRL(
     PCCERT_CONTEXT pCert,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwFlags,
     void *pvReserved,
     PCRL_ENTRY *ppCrlEntry
    );

BOOL

CertIsValidCRLForCertificate(
     PCCERT_CONTEXT pCert,
     PCCRL_CONTEXT pCrl,
     DWORD dwFlags,
     void *pvReserved
    );

BOOL

CertAddEncodedCertificateToStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     const BYTE *pbCertEncoded,
     DWORD cbCertEncoded,
     DWORD dwAddDisposition,
     PCCERT_CONTEXT *ppCertContext
    );

BOOL

CertAddCertificateContextToStore(
     HCERTSTORE hCertStore,
     PCCERT_CONTEXT pCertContext,
     DWORD dwAddDisposition,
     PCCERT_CONTEXT *ppStoreContext
    );

BOOL

CertAddSerializedElementToStore(
     HCERTSTORE hCertStore,
     const BYTE *pbElement,
     DWORD cbElement,
     DWORD dwAddDisposition,
     DWORD dwFlags,
     DWORD dwContextTypeFlags,
     DWORD *pdwContextType,
     const void **ppvContext
    );

BOOL

CertDeleteCertificateFromStore(
     PCCERT_CONTEXT pCertContext
    );

BOOL

CertAddEncodedCRLToStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     const BYTE *pbCrlEncoded,
     DWORD cbCrlEncoded,
     DWORD dwAddDisposition,
     PCCRL_CONTEXT *ppCrlContext
    );

BOOL

CertAddCRLContextToStore(
     HCERTSTORE hCertStore,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwAddDisposition,
     PCCRL_CONTEXT *ppStoreContext
    );

BOOL

CertDeleteCRLFromStore(
     PCCRL_CONTEXT pCrlContext
    );

BOOL

CertSerializeCertificateStoreElement(
     PCCERT_CONTEXT pCertContext,
     DWORD dwFlags,
     BYTE *pbElement,
     DWORD *pcbElement
    );

BOOL

CertSerializeCRLStoreElement(
     PCCRL_CONTEXT pCrlContext,
     DWORD dwFlags,
     BYTE *pbElement,
     DWORD *pcbElement
    );

PCCTL_CONTEXT

CertDuplicateCTLContext(
     PCCTL_CONTEXT pCtlContext
    );

PCCTL_CONTEXT

CertCreateCTLContext(
     DWORD dwMsgAndCertEncodingType,
     const BYTE *pbCtlEncoded,
     DWORD cbCtlEncoded
    );

BOOL

CertFreeCTLContext(
     PCCTL_CONTEXT pCtlContext
    );

BOOL

CertSetCTLContextProperty(
     PCCTL_CONTEXT pCtlContext,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );

BOOL

CertGetCTLContextProperty(
     PCCTL_CONTEXT pCtlContext,
     DWORD dwPropId,
     void *pvData,
     DWORD *pcbData
    );

DWORD

CertEnumCTLContextProperties(
     PCCTL_CONTEXT pCtlContext,
     DWORD dwPropId
    );

PCCTL_CONTEXT

CertEnumCTLsInStore(
     HCERTSTORE hCertStore,
     PCCTL_CONTEXT pPrevCtlContext
    );

PCTL_ENTRY

CertFindSubjectInCTL(
     DWORD dwEncodingType,
     DWORD dwSubjectType,
     void *pvSubject,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwFlags
    );
typedef struct _CTL_ANY_SUBJECT_INFO {
    CRYPT_ALGORITHM_IDENTIFIER  SubjectAlgorithm;
    CRYPT_DATA_BLOB             SubjectIdentifier;
} CTL_ANY_SUBJECT_INFO, *PCTL_ANY_SUBJECT_INFO;

PCCTL_CONTEXT

CertFindCTLInStore(
     HCERTSTORE hCertStore,
     DWORD dwMsgAndCertEncodingType,
     DWORD dwFindFlags,
     DWORD dwFindType,
     const void *pvFindPara,
     PCCTL_CONTEXT pPrevCtlContext
    );
typedef struct _CTL_FIND_USAGE_PARA {
    DWORD               cbSize;
    CTL_USAGE           SubjectUsage;
    CRYPT_DATA_BLOB     ListIdentifier;
    PCERT_INFO          pSigner;
} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;
typedef struct _CTL_FIND_SUBJECT_PARA {
    DWORD                   cbSize;
    PCTL_FIND_USAGE_PARA    pUsagePara;
    DWORD                   dwSubjectType;
    void                    *pvSubject;
} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;

BOOL

CertAddEncodedCTLToStore(
     HCERTSTORE hCertStore,
     DWORD dwMsgAndCertEncodingType,
     const BYTE *pbCtlEncoded,
     DWORD cbCtlEncoded,
     DWORD dwAddDisposition,
     PCCTL_CONTEXT *ppCtlContext
    );

BOOL

CertAddCTLContextToStore(
     HCERTSTORE hCertStore,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwAddDisposition,
     PCCTL_CONTEXT *ppStoreContext
    );

BOOL

CertSerializeCTLStoreElement(
     PCCTL_CONTEXT pCtlContext,
     DWORD dwFlags,
     BYTE *pbElement,
     DWORD *pcbElement
    );

BOOL

CertDeleteCTLFromStore(
     PCCTL_CONTEXT pCtlContext
    );

BOOL

CertAddCertificateLinkToStore(
     HCERTSTORE hCertStore,
     PCCERT_CONTEXT pCertContext,
     DWORD dwAddDisposition,
     PCCERT_CONTEXT *ppStoreContext
    );

BOOL

CertAddCRLLinkToStore(
     HCERTSTORE hCertStore,
     PCCRL_CONTEXT pCrlContext,
     DWORD dwAddDisposition,
     PCCRL_CONTEXT *ppStoreContext
    );

BOOL

CertAddCTLLinkToStore(
     HCERTSTORE hCertStore,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwAddDisposition,
     PCCTL_CONTEXT *ppStoreContext
    );

BOOL

CertAddStoreToCollection(
     HCERTSTORE hCollectionStore,
     HCERTSTORE hSiblingStore,
     DWORD dwUpdateFlags,
     DWORD dwPriority
    );

void

CertRemoveStoreFromCollection(
     HCERTSTORE hCollectionStore,
     HCERTSTORE hSiblingStore
    );

BOOL

CertControlStore(
     HCERTSTORE hCertStore,
     DWORD dwFlags,
     DWORD dwCtrlType,
     void const *pvCtrlPara
    );

BOOL

CertSetStoreProperty(
     HCERTSTORE hCertStore,
     DWORD dwPropId,
     DWORD dwFlags,
     const void *pvData
    );

BOOL

CertGetStoreProperty(
     HCERTSTORE hCertStore,
     DWORD dwPropId,
     void *pvData,
     DWORD *pcbData
    );
typedef BOOL ( *PFN_CERT_CREATE_CONTEXT_SORT_FUNC)(
     DWORD cbTotalEncoded,
     DWORD cbRemainEncoded,
     DWORD cEntry,
     void *pvSort
    );
typedef struct _CERT_CREATE_CONTEXT_PARA {
    DWORD                               cbSize;
    PFN_CRYPT_FREE                      pfnFree;
    void                                *pvFree;
    PFN_CERT_CREATE_CONTEXT_SORT_FUNC   pfnSort;
    void                                *pvSort;
} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;

const void *

CertCreateContext(
     DWORD dwContextType,
     DWORD dwEncodingType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     DWORD dwFlags,
     PCERT_CREATE_CONTEXT_PARA pCreatePara
    );
typedef struct _CERT_SYSTEM_STORE_INFO {
    DWORD   cbSize;
} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
typedef struct _CERT_PHYSICAL_STORE_INFO {
    DWORD               cbSize;
    LPSTR               pszOpenStoreProvider;
    DWORD               dwOpenEncodingType;
    DWORD               dwOpenFlags;
    CRYPT_DATA_BLOB     OpenParameters;
    DWORD               dwFlags;
    DWORD               dwPriority;
} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;

BOOL

CertRegisterSystemStore(
     const void *pvSystemStore,
     DWORD dwFlags,
     PCERT_SYSTEM_STORE_INFO pStoreInfo,
     void *pvReserved
    );

BOOL

CertRegisterPhysicalStore(
     const void *pvSystemStore,
     DWORD dwFlags,
     LPCWSTR pwszStoreName,
     PCERT_PHYSICAL_STORE_INFO pStoreInfo,
     void *pvReserved
    );

BOOL

CertUnregisterSystemStore(
     const void *pvSystemStore,
     DWORD dwFlags
    );

BOOL

CertUnregisterPhysicalStore(
     const void *pvSystemStore,
     DWORD dwFlags,
     LPCWSTR pwszStoreName
    );
typedef BOOL ( *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
     LPCWSTR pwszStoreLocation,
     DWORD dwFlags,
     void *pvReserved,
     void *pvArg
    );
typedef BOOL ( *PFN_CERT_ENUM_SYSTEM_STORE)(
     const void *pvSystemStore,
     DWORD dwFlags,
     PCERT_SYSTEM_STORE_INFO pStoreInfo,
     void *pvReserved,
     void *pvArg
    );
typedef BOOL ( *PFN_CERT_ENUM_PHYSICAL_STORE)(
     const void *pvSystemStore,
     DWORD dwFlags,
     LPCWSTR pwszStoreName,
     PCERT_PHYSICAL_STORE_INFO pStoreInfo,
     void *pvReserved,
     void *pvArg
    );

BOOL

CertEnumSystemStoreLocation(
     DWORD dwFlags,
     void *pvArg,
     PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum
    );

BOOL

CertEnumSystemStore(
     DWORD dwFlags,
     void *pvSystemStoreLocationPara,
     void *pvArg,
     PFN_CERT_ENUM_SYSTEM_STORE pfnEnum
    );

BOOL

CertEnumPhysicalStore(
     const void *pvSystemStore,
     DWORD dwFlags,
     void *pvArg,
     PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum
    );

BOOL

CertGetEnhancedKeyUsage(
     PCCERT_CONTEXT pCertContext,
     DWORD dwFlags,
     PCERT_ENHKEY_USAGE pUsage,
     DWORD *pcbUsage
    );

BOOL

CertSetEnhancedKeyUsage(
     PCCERT_CONTEXT pCertContext,
     PCERT_ENHKEY_USAGE pUsage
    );

BOOL

CertAddEnhancedKeyUsageIdentifier(
     PCCERT_CONTEXT pCertContext,
     LPCSTR pszUsageIdentifier
    );

BOOL

CertRemoveEnhancedKeyUsageIdentifier(
     PCCERT_CONTEXT pCertContext,
     LPCSTR pszUsageIdentifier
    );

BOOL

CertGetValidUsages(
     DWORD cCerts,
     PCCERT_CONTEXT *rghCerts,
     int *cNumOIDs,
     LPSTR *rghOIDs,
     DWORD *pcbOIDs);

BOOL

CryptMsgGetAndVerifySigner(
     HCRYPTMSG hCryptMsg,
     DWORD cSignerStore,
     HCERTSTORE *rghSignerStore,
     DWORD dwFlags,
     PCCERT_CONTEXT *ppSigner,
     DWORD *pdwSignerIndex
    );

BOOL

CryptMsgSignCTL(
     DWORD dwMsgEncodingType,
     BYTE *pbCtlContent,
     DWORD cbCtlContent,
     PCMSG_SIGNED_ENCODE_INFO pSignInfo,
     DWORD dwFlags,
     BYTE *pbEncoded,
     DWORD *pcbEncoded
    );

BOOL

CryptMsgEncodeAndSignCTL(
     DWORD dwMsgEncodingType,
     PCTL_INFO pCtlInfo,
     PCMSG_SIGNED_ENCODE_INFO pSignInfo,
     DWORD dwFlags,
     BYTE *pbEncoded,
     DWORD *pcbEncoded
    );

BOOL

CertFindSubjectInSortedCTL(
     PCRYPT_DATA_BLOB pSubjectIdentifier,
     PCCTL_CONTEXT pCtlContext,
     DWORD dwFlags,
     void *pvReserved,
     PCRYPT_DER_BLOB pEncodedAttributes
    );

BOOL

CertEnumSubjectInSortedCTL(
     PCCTL_CONTEXT pCtlContext,
     void **ppvNextSubject,
     PCRYPT_DER_BLOB pSubjectIdentifier,
     PCRYPT_DER_BLOB pEncodedAttributes
    );
typedef struct _CTL_VERIFY_USAGE_PARA {
    DWORD                   cbSize;
    CRYPT_DATA_BLOB         ListIdentifier;
    DWORD                   cCtlStore;
    HCERTSTORE              *rghCtlStore;
    DWORD                   cSignerStore;
    HCERTSTORE              *rghSignerStore;
} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;
typedef struct _CTL_VERIFY_USAGE_STATUS {
    DWORD                   cbSize;
    DWORD                   dwError;
    DWORD                   dwFlags;
    PCCTL_CONTEXT           *ppCtl;
    DWORD                   dwCtlEntryIndex;
    PCCERT_CONTEXT          *ppSigner;
    DWORD                   dwSignerIndex;
} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;

BOOL

CertVerifyCTLUsage(
     DWORD dwEncodingType,
     DWORD dwSubjectType,
     void *pvSubject,
     PCTL_USAGE pSubjectUsage,
     DWORD dwFlags,
     PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
     PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus
    );
typedef struct _CERT_REVOCATION_CRL_INFO {
    DWORD                   cbSize;
    PCCRL_CONTEXT           pBaseCrlContext;
    PCCRL_CONTEXT           pDeltaCrlContext;
    PCRL_ENTRY              pCrlEntry;
    BOOL                    fDeltaCrlEntry;
} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
typedef struct _CERT_REVOCATION_PARA {
    DWORD                       cbSize;
    PCCERT_CONTEXT              pIssuerCert;
    DWORD                       cCertStore;
    HCERTSTORE                  *rgCertStore;
    HCERTSTORE                  hCrlStore;
    LPFILETIME                  pftTimeToUse;
} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;
typedef struct _CERT_REVOCATION_STATUS {
    DWORD                   cbSize;
    DWORD                   dwIndex;
    DWORD                   dwError;
    DWORD                   dwReason;
    BOOL                    fHasFreshnessTime;
    DWORD                   dwFreshnessTime;
} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;

BOOL

CertVerifyRevocation(
     DWORD dwEncodingType,
     DWORD dwRevType,
     DWORD cContext,
     PVOID rgpvContext[],
     DWORD dwFlags,
     PCERT_REVOCATION_PARA pRevPara,
     PCERT_REVOCATION_STATUS pRevStatus
    );
BOOL

CertCompareIntegerBlob(
     PCRYPT_INTEGER_BLOB pInt1,
     PCRYPT_INTEGER_BLOB pInt2
    );

BOOL

CertCompareCertificate(
     DWORD dwCertEncodingType,
     PCERT_INFO pCertId1,
     PCERT_INFO pCertId2
    );

BOOL

CertCompareCertificateName(
     DWORD dwCertEncodingType,
     PCERT_NAME_BLOB pCertName1,
     PCERT_NAME_BLOB pCertName2
    );

BOOL

CertIsRDNAttrsInCertificateName(
     DWORD dwCertEncodingType,
     DWORD dwFlags,
     PCERT_NAME_BLOB pCertName,
     PCERT_RDN pRDN
    );

BOOL

CertComparePublicKeyInfo(
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pPublicKey1,
     PCERT_PUBLIC_KEY_INFO pPublicKey2
    );

DWORD

CertGetPublicKeyLength(
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pPublicKey
    );

BOOL

CryptVerifyCertificateSignature(
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwCertEncodingType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     PCERT_PUBLIC_KEY_INFO pPublicKey
    );

BOOL

CryptVerifyCertificateSignatureEx(
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwCertEncodingType,
     DWORD dwSubjectType,
     void *pvSubject,
     DWORD dwIssuerType,
     void *pvIssuer,
     DWORD dwFlags,
     void *pvReserved
    );

BOOL

CryptHashToBeSigned(
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwCertEncodingType,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptHashCertificate(
     HCRYPTPROV_LEGACY hCryptProv,
     ALG_ID Algid,
     DWORD dwFlags,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptHashCertificate2(
     LPCWSTR pwszCNGHashAlgid,
     DWORD dwFlags,
     void *pvReserved,
     const BYTE *pbEncoded,
     DWORD cbEncoded,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptSignCertificate(
     HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
     DWORD dwKeySpec,
     DWORD dwCertEncodingType,
     const BYTE *pbEncodedToBeSigned,
     DWORD cbEncodedToBeSigned,
     PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
     const void *pvHashAuxInfo,
     BYTE *pbSignature,
     DWORD *pcbSignature
    );

BOOL

CryptSignAndEncodeCertificate(
     HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
     DWORD dwKeySpec,
     DWORD dwCertEncodingType,
     LPCSTR lpszStructType,
     const void *pvStructInfo,
     PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
     const void *pvHashAuxInfo,
     BYTE *pbEncoded,
     DWORD *pcbEncoded
    );
typedef BOOL ( *PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC)(
     DWORD dwCertEncodingType,
     PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
     void **ppvDecodedSignPara,
     LPWSTR *ppwszCNGHashAlgid
    );
typedef BOOL ( *PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC)(
     NCRYPT_KEY_HANDLE hKey,
     DWORD dwCertEncodingType,
     PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
     void *pvDecodedSignPara,
     LPCWSTR pwszCNGPubKeyAlgid,
     LPCWSTR pwszCNGHashAlgid,
     BYTE *pbComputedHash,
     DWORD cbComputedHash,
     BYTE *pbSignature,
     DWORD *pcbSignature
    );
typedef BOOL ( *PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC)(
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pPubKeyInfo,
     PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
     void *pvDecodedSignPara,
     LPCWSTR pwszCNGPubKeyAlgid,
     LPCWSTR pwszCNGHashAlgid,
     BYTE *pbComputedHash,
     DWORD cbComputedHash,
     BYTE *pbSignature,
     DWORD cbSignature
    );

LONG

CertVerifyTimeValidity(
     LPFILETIME pTimeToVerify,
     PCERT_INFO pCertInfo
    );

LONG

CertVerifyCRLTimeValidity(
     LPFILETIME pTimeToVerify,
     PCRL_INFO pCrlInfo
    );

BOOL

CertVerifyValidityNesting(
     PCERT_INFO pSubjectInfo,
     PCERT_INFO pIssuerInfo
    );

BOOL

CertVerifyCRLRevocation(
     DWORD dwCertEncodingType,
     PCERT_INFO pCertId,
     DWORD cCrlInfo,
     PCRL_INFO rgpCrlInfo[]
    );

LPCSTR

CertAlgIdToOID(
     DWORD dwAlgId
    );

DWORD

CertOIDToAlgId(
     LPCSTR pszObjId
    );

PCERT_EXTENSION

CertFindExtension(
     LPCSTR pszObjId,
     DWORD cExtensions,
     CERT_EXTENSION rgExtensions[]
    );

PCRYPT_ATTRIBUTE

CertFindAttribute(
     LPCSTR pszObjId,
     DWORD cAttr,
     CRYPT_ATTRIBUTE rgAttr[]
    );

PCERT_RDN_ATTR

CertFindRDNAttr(
     LPCSTR pszObjId,
     PCERT_NAME_INFO pName
    );

BOOL

CertGetIntendedKeyUsage(
     DWORD dwCertEncodingType,
     PCERT_INFO pCertInfo,
     BYTE *pbKeyUsage,
     DWORD cbKeyUsage
    );
typedef void *HCRYPTDEFAULTCONTEXT;

BOOL

CryptInstallDefaultContext(
     HCRYPTPROV hCryptProv,
     DWORD dwDefaultType,
     const void *pvDefaultPara,
     DWORD dwFlags,
     void *pvReserved,
     HCRYPTDEFAULTCONTEXT *phDefaultContext
    );
typedef struct _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
    DWORD               cOID;
    LPSTR               *rgpszOID;
} CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA, *PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;

BOOL

CryptUninstallDefaultContext(
     HCRYPTDEFAULTCONTEXT hDefaultContext,
     DWORD dwFlags,
     void *pvReserved
    );

BOOL

CryptExportPublicKeyInfo(
     HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
     DWORD dwKeySpec,
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     DWORD *pcbInfo
    );

BOOL

CryptExportPublicKeyInfoEx(
     HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
     DWORD dwKeySpec,
     DWORD dwCertEncodingType,
     LPSTR pszPublicKeyObjId,
     DWORD dwFlags,
     void *pvAuxInfo,
     PCERT_PUBLIC_KEY_INFO pInfo,
     DWORD *pcbInfo
    );
typedef BOOL ( *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC) (
     NCRYPT_KEY_HANDLE hNCryptKey,
     DWORD dwCertEncodingType,
     LPSTR pszPublicKeyObjId,
     DWORD dwFlags,
     void *pvAuxInfo,
     PCERT_PUBLIC_KEY_INFO pInfo,
     DWORD *pcbInfo
    );

BOOL

CryptImportPublicKeyInfo(
     HCRYPTPROV hCryptProv,
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     HCRYPTKEY *phKey
    );

BOOL

CryptImportPublicKeyInfoEx(
     HCRYPTPROV hCryptProv,
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     ALG_ID aiKeyAlg,
     DWORD dwFlags,
     void *pvAuxInfo,
     HCRYPTKEY *phKey
    );

BOOL

CryptImportPublicKeyInfoEx2(
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     DWORD dwFlags,
     void *pvAuxInfo,
     BCRYPT_KEY_HANDLE *phKey
    );
typedef BOOL ( *PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC) (
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     DWORD dwFlags,
     void *pvAuxInfo,
     BCRYPT_KEY_HANDLE *phKey
    );

BOOL

CryptAcquireCertificatePrivateKey(
     PCCERT_CONTEXT pCert,
     DWORD dwFlags,
     void *pvReserved,
     HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProvOrNCryptKey,
     DWORD *pdwKeySpec,
     BOOL *pfCallerFreeProvOrNCryptKey
    );

BOOL

CryptFindCertificateKeyProvInfo(
     PCCERT_CONTEXT pCert,
     DWORD dwFlags,
     void *pvReserved
    );
typedef BOOL ( *PFN_IMPORT_PRIV_KEY_FUNC) (
     HCRYPTPROV hCryptProv,
     CRYPT_PRIVATE_KEY_INFO* pPrivateKeyInfo,
     DWORD dwFlags,
     void* pvAuxInfo
    );

BOOL

CryptImportPKCS8(
     CRYPT_PKCS8_IMPORT_PARAMS sPrivateKeyAndParams,
     DWORD dwFlags,
     HCRYPTPROV *phCryptProv,
     void* pvAuxInfo
    );
typedef BOOL ( *PFN_EXPORT_PRIV_KEY_FUNC) (
     HCRYPTPROV hCryptProv,
     DWORD dwKeySpec,
     LPSTR pszPrivateKeyObjId,
     DWORD dwFlags,
     void* pvAuxInfo,
     CRYPT_PRIVATE_KEY_INFO* pPrivateKeyInfo,
     DWORD* pcbPrivateKeyInfo
    );

BOOL

CryptExportPKCS8(
     HCRYPTPROV hCryptProv,
     DWORD dwKeySpec,
     LPSTR pszPrivateKeyObjId,
     DWORD dwFlags,
     void* pvAuxInfo,
     BYTE* pbPrivateKeyBlob,
     DWORD *pcbPrivateKeyBlob
    );

BOOL

CryptExportPKCS8Ex(
     CRYPT_PKCS8_EXPORT_PARAMS* psExportParams,
     DWORD dwFlags,
     void* pvAuxInfo,
     BYTE* pbPrivateKeyBlob,
     DWORD* pcbPrivateKeyBlob
    );

BOOL

CryptHashPublicKeyInfo(
     HCRYPTPROV_LEGACY hCryptProv,
     ALG_ID Algid,
     DWORD dwFlags,
     DWORD dwCertEncodingType,
     PCERT_PUBLIC_KEY_INFO pInfo,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

DWORD

CertRDNValueToStrA(
     DWORD dwValueType,
     PCERT_RDN_VALUE_BLOB pValue,
     LPSTR psz,
     DWORD csz
    );

DWORD

CertRDNValueToStrW(
     DWORD dwValueType,
     PCERT_RDN_VALUE_BLOB pValue,
     LPWSTR psz,
     DWORD csz
    );

DWORD

CertNameToStrA(
     DWORD dwCertEncodingType,
     PCERT_NAME_BLOB pName,
     DWORD dwStrType,
     LPSTR psz,
     DWORD csz
    );

DWORD

CertNameToStrW(
     DWORD dwCertEncodingType,
     PCERT_NAME_BLOB pName,
     DWORD dwStrType,
     LPWSTR psz,
     DWORD csz
    );

BOOL

CertStrToNameA(
     DWORD dwCertEncodingType,
     LPCSTR pszX500,
     DWORD dwStrType,
     void *pvReserved,
     BYTE *pbEncoded,
     DWORD *pcbEncoded,
     LPCSTR *ppszError
    );

BOOL

CertStrToNameW(
     DWORD dwCertEncodingType,
     LPCWSTR pszX500,
     DWORD dwStrType,
     void *pvReserved,
     BYTE *pbEncoded,
     DWORD *pcbEncoded,
     LPCWSTR *ppszError
    );

DWORD

CertGetNameStringA(
     PCCERT_CONTEXT pCertContext,
     DWORD dwType,
     DWORD dwFlags,
     void *pvTypePara,
     LPSTR pszNameString,
     DWORD cchNameString
    );

DWORD

CertGetNameStringW(
     PCCERT_CONTEXT pCertContext,
     DWORD dwType,
     DWORD dwFlags,
     void *pvTypePara,
     LPWSTR pszNameString,
     DWORD cchNameString
    );
typedef PCCERT_CONTEXT ( *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(
     void *pvGetArg,
     DWORD dwCertEncodingType,
     PCERT_INFO pSignerId,
     HCERTSTORE hMsgCertStore
    );
typedef struct _CRYPT_SIGN_MESSAGE_PARA {
    DWORD                       cbSize;
    DWORD                       dwMsgEncodingType;
    PCCERT_CONTEXT              pSigningCert;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    void                        *pvHashAuxInfo;
    DWORD                       cMsgCert;
    PCCERT_CONTEXT              *rgpMsgCert;
    DWORD                       cMsgCrl;
    PCCRL_CONTEXT               *rgpMsgCrl;
    DWORD                       cAuthAttr;
    PCRYPT_ATTRIBUTE            rgAuthAttr;
    DWORD                       cUnauthAttr;
    PCRYPT_ATTRIBUTE            rgUnauthAttr;
    DWORD                       dwFlags;
    DWORD                       dwInnerContentType;
} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
    DWORD                               cbSize;
    DWORD                               dwMsgAndCertEncodingType;
    HCRYPTPROV_LEGACY                   hCryptProv;
    PFN_CRYPT_GET_SIGNER_CERTIFICATE    pfnGetSignerCertificate;
    void                                *pvGetArg;
} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
    DWORD                       cbSize;
    DWORD                       dwMsgEncodingType;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
    void                        *pvEncryptionAuxInfo;
    DWORD                       dwFlags;
    DWORD                       dwInnerContentType;
} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
    DWORD                   cbSize;
    DWORD                   dwMsgAndCertEncodingType;
    DWORD                   cCertStore;
    HCERTSTORE              *rghCertStore;
} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
typedef struct _CRYPT_HASH_MESSAGE_PARA {
    DWORD                       cbSize;
    DWORD                       dwMsgEncodingType;
    HCRYPTPROV_LEGACY           hCryptProv;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    void                        *pvHashAuxInfo;
} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
    DWORD                       cbSize;
    DWORD                       dwMsgAndCertEncodingType;
    union {
        HCRYPTPROV                  hCryptProv;
        NCRYPT_KEY_HANDLE           hNCryptKey;
    };
    DWORD                       dwKeySpec;
    CRYPT_ALGORITHM_IDENTIFIER  HashAlgorithm;
    void                        *pvHashAuxInfo;
    CRYPT_ALGORITHM_IDENTIFIER  PubKeyAlgorithm;
} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;
typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
    DWORD                   cbSize;
    DWORD                   dwMsgEncodingType;
    HCRYPTPROV_LEGACY       hCryptProv;
} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;

BOOL

CryptSignMessage(
     PCRYPT_SIGN_MESSAGE_PARA pSignPara,
     BOOL fDetachedSignature,
     DWORD cToBeSigned,
     const BYTE *rgpbToBeSigned[],
     DWORD rgcbToBeSigned[],
     BYTE *pbSignedBlob,
     DWORD *pcbSignedBlob
    );

BOOL

CryptVerifyMessageSignature(
     PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
     DWORD dwSignerIndex,
     const BYTE *pbSignedBlob,
     DWORD cbSignedBlob,
     BYTE *pbDecoded,
     DWORD *pcbDecoded,
     PCCERT_CONTEXT *ppSignerCert
    );

LONG

CryptGetMessageSignerCount(
     DWORD dwMsgEncodingType,
     const BYTE *pbSignedBlob,
     DWORD cbSignedBlob
    );

HCERTSTORE

CryptGetMessageCertificates(
     DWORD dwMsgAndCertEncodingType,
     HCRYPTPROV_LEGACY hCryptProv,
     DWORD dwFlags,
     const BYTE *pbSignedBlob,
     DWORD cbSignedBlob
    );

BOOL

CryptVerifyDetachedMessageSignature(
     PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
     DWORD dwSignerIndex,
     const BYTE *pbDetachedSignBlob,
     DWORD cbDetachedSignBlob,
     DWORD cToBeSigned,
     const BYTE *rgpbToBeSigned[],
     DWORD rgcbToBeSigned[],
     PCCERT_CONTEXT *ppSignerCert
    );

BOOL

CryptEncryptMessage(
     PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
     DWORD cRecipientCert,
     PCCERT_CONTEXT rgpRecipientCert[],
     const BYTE *pbToBeEncrypted,
     DWORD cbToBeEncrypted,
     BYTE *pbEncryptedBlob,
     DWORD *pcbEncryptedBlob
    );

BOOL

CryptDecryptMessage(
     PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
     const BYTE *pbEncryptedBlob,
     DWORD cbEncryptedBlob,
     BYTE *pbDecrypted,
     DWORD *pcbDecrypted,
     PCCERT_CONTEXT *ppXchgCert
    );

BOOL

CryptSignAndEncryptMessage(
     PCRYPT_SIGN_MESSAGE_PARA pSignPara,
     PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
     DWORD cRecipientCert,
     PCCERT_CONTEXT rgpRecipientCert[],
     const BYTE *pbToBeSignedAndEncrypted,
     DWORD cbToBeSignedAndEncrypted,
     BYTE *pbSignedAndEncryptedBlob,
     DWORD *pcbSignedAndEncryptedBlob
    );

BOOL

CryptDecryptAndVerifyMessageSignature(
     PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
     PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
     DWORD dwSignerIndex,
     const BYTE *pbEncryptedBlob,
     DWORD cbEncryptedBlob,
     BYTE *pbDecrypted,
     DWORD *pcbDecrypted,
     PCCERT_CONTEXT *ppXchgCert,
     PCCERT_CONTEXT *ppSignerCert
    );

BOOL

CryptDecodeMessage(
     DWORD dwMsgTypeFlags,
     PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
     PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
     DWORD dwSignerIndex,
     const BYTE *pbEncodedBlob,
     DWORD cbEncodedBlob,
     DWORD dwPrevInnerContentType,
     DWORD *pdwMsgType,
     DWORD *pdwInnerContentType,
     BYTE *pbDecoded,
     DWORD *pcbDecoded,
     PCCERT_CONTEXT *ppXchgCert,
     PCCERT_CONTEXT *ppSignerCert
    );

BOOL

CryptHashMessage(
     PCRYPT_HASH_MESSAGE_PARA pHashPara,
     BOOL fDetachedHash,
     DWORD cToBeHashed,
     const BYTE *rgpbToBeHashed[],
     DWORD rgcbToBeHashed[],
     BYTE *pbHashedBlob,
     DWORD *pcbHashedBlob,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptVerifyMessageHash(
     PCRYPT_HASH_MESSAGE_PARA pHashPara,
     BYTE *pbHashedBlob,
     DWORD cbHashedBlob,
     BYTE *pbToBeHashed,
     DWORD *pcbToBeHashed,
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptVerifyDetachedMessageHash(
     PCRYPT_HASH_MESSAGE_PARA pHashPara,
     BYTE *pbDetachedHashBlob,
     DWORD cbDetachedHashBlob,
     DWORD cToBeHashed,
     const BYTE *rgpbToBeHashed[],
     DWORD rgcbToBeHashed[],
     BYTE *pbComputedHash,
     DWORD *pcbComputedHash
    );

BOOL

CryptSignMessageWithKey(
     PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
     const BYTE *pbToBeSigned,
     DWORD cbToBeSigned,
     BYTE *pbSignedBlob,
     DWORD *pcbSignedBlob
    );

BOOL

CryptVerifyMessageSignatureWithKey(
     PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
     PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
     const BYTE *pbSignedBlob,
     DWORD cbSignedBlob,
     BYTE *pbDecoded,
     DWORD *pcbDecoded
    );

HCERTSTORE

CertOpenSystemStoreA(
     HCRYPTPROV_LEGACY      hProv,
     LPCSTR            szSubsystemProtocol
    );

HCERTSTORE

CertOpenSystemStoreW(
     HCRYPTPROV_LEGACY      hProv,
     LPCWSTR            szSubsystemProtocol
    );

BOOL

CertAddEncodedCertificateToSystemStoreA(
     LPCSTR            szCertStoreName,
     const BYTE *    pbCertEncoded,
     DWORD           cbCertEncoded
    );

BOOL

CertAddEncodedCertificateToSystemStoreW(
     LPCWSTR            szCertStoreName,
     const BYTE *    pbCertEncoded,
     DWORD           cbCertEncoded
    );
typedef struct _CERT_CHAIN {
    DWORD                   cCerts;
    PCERT_BLOB              certs;
    CRYPT_KEY_PROV_INFO     keyLocatorInfo;
} CERT_CHAIN, *PCERT_CHAIN;
HRESULT

FindCertsByIssuer(
     PCERT_CHAIN pCertChains,
     DWORD *pcbCertChains,
     DWORD *pcCertChains,
     BYTE* pbEncodedIssuerName,
     DWORD cbEncodedIssuerName,
     LPCWSTR pwszPurpose,
     DWORD dwKeySpec
    );

BOOL

CryptQueryObject(
     DWORD                    dwObjectType,
     const void               *pvObject,
     DWORD                    dwExpectedContentTypeFlags,
     DWORD                    dwExpectedFormatTypeFlags,
     DWORD                    dwFlags,
     DWORD               *pdwMsgAndCertEncodingType,
     DWORD               *pdwContentType,
     DWORD               *pdwFormatType,
     HCERTSTORE          *phCertStore,
     HCRYPTMSG           *phMsg,
     const void **ppvContext
    );

LPVOID

CryptMemAlloc (
     ULONG cbSize
    );

LPVOID

CryptMemRealloc (
     LPVOID pv,
     ULONG cbSize
    );

void

CryptMemFree (
     LPVOID pv
    );
typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;
typedef void ( *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC) (
     LPSTR pszParamOid,
     LPVOID pvParam
    );

BOOL

CryptCreateAsyncHandle (
     DWORD dwFlags,
     PHCRYPTASYNC phAsync
    );

BOOL

CryptSetAsyncParam (
     HCRYPTASYNC hAsync,
     LPSTR pszParamOid,
     LPVOID pvParam,
     PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree
    );

BOOL

CryptGetAsyncParam (
     HCRYPTASYNC hAsync,
     LPSTR pszParamOid,
     LPVOID* ppvParam,
       PFN_CRYPT_ASYNC_PARAM_FREE_FUNC* ppfnFree
    );

BOOL

CryptCloseAsyncHandle (
     HCRYPTASYNC hAsync
    );
typedef struct _CRYPT_BLOB_ARRAY {
    DWORD            cBlob;
    PCRYPT_DATA_BLOB rgBlob;
} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;
typedef struct _CRYPT_CREDENTIALS {
    DWORD  cbSize;
    LPCSTR pszCredentialsOid;
    LPVOID pvCredentials;
} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
    DWORD   cbSize;
    LPSTR   pszUsername;
    LPSTR   pszPassword;
} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;
typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
    DWORD   cbSize;
    LPWSTR  pszUsername;
    LPWSTR  pszPassword;
} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
typedef CRYPT_PASSWORD_CREDENTIALSA CRYPT_PASSWORD_CREDENTIALS;
typedef PCRYPT_PASSWORD_CREDENTIALSA PCRYPT_PASSWORD_CREDENTIALS;
typedef void ( *PFN_FREE_ENCODED_OBJECT_FUNC) (
     LPCSTR pszObjectOid,
     PCRYPT_BLOB_ARRAY pObject,
     LPVOID pvFreeContext
    );
typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
    DWORD           cbSize;
    DWORD           dwObjectType;
    DWORD           dwError;
    DWORD           dwReserved;
    FILETIME        ThisUpdateTime;
    FILETIME        NextUpdateTime;
    FILETIME        PublishTime;
} CRYPTNET_URL_CACHE_PRE_FETCH_INFO, *PCRYPTNET_URL_CACHE_PRE_FETCH_INFO;
typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO {
    DWORD           cbSize;
    DWORD           dwExemptSeconds;
    FILETIME        ExpireTime;
} CRYPTNET_URL_CACHE_FLUSH_INFO, *PCRYPTNET_URL_CACHE_FLUSH_INFO;
typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO {
    DWORD           cbSize;
    WORD            wResponseType;
    WORD            wResponseFlags;
    FILETIME        LastModifiedTime;
    DWORD           dwMaxAge;
    LPCWSTR         pwszETag;
    DWORD           dwProxyId;
} CRYPTNET_URL_CACHE_RESPONSE_INFO, *PCRYPTNET_URL_CACHE_RESPONSE_INFO;
typedef struct _CRYPT_RETRIEVE_AUX_INFO {
    DWORD                               cbSize;
    FILETIME                            *pLastSyncTime;
    DWORD                               dwMaxUrlRetrievalByteCount;
    PCRYPTNET_URL_CACHE_PRE_FETCH_INFO  pPreFetchInfo;
    PCRYPTNET_URL_CACHE_FLUSH_INFO      pFlushInfo;
    PCRYPTNET_URL_CACHE_RESPONSE_INFO   *ppResponseInfo;
    LPWSTR                              pwszCacheFileNamePrefix;
    LPFILETIME                          pftCacheResync;
    BOOL                                fProxyCacheRetrieval;
    DWORD                               dwHttpStatusCode;
} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;

BOOL

CryptRetrieveObjectByUrlA (
     LPCSTR pszUrl,
     LPCSTR pszObjectOid,
     DWORD dwRetrievalFlags,
     DWORD dwTimeout,
     LPVOID* ppvObject,
     HCRYPTASYNC hAsyncRetrieve,
     PCRYPT_CREDENTIALS pCredentials,
     LPVOID pvVerify,
     PCRYPT_RETRIEVE_AUX_INFO pAuxInfo
    );

BOOL

CryptRetrieveObjectByUrlW (
     LPCWSTR pszUrl,
     LPCSTR pszObjectOid,
     DWORD dwRetrievalFlags,
     DWORD dwTimeout,
     LPVOID* ppvObject,
     HCRYPTASYNC hAsyncRetrieve,
     PCRYPT_CREDENTIALS pCredentials,
     LPVOID pvVerify,
     PCRYPT_RETRIEVE_AUX_INFO pAuxInfo
    );
typedef BOOL ( *PFN_CRYPT_CANCEL_RETRIEVAL)(
     DWORD dwFlags,
     void  *pvArg
    );

BOOL

CryptInstallCancelRetrieval(
     PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
     const void *pvArg,
     DWORD dwFlags,
     void *pvReserved
);

BOOL

CryptUninstallCancelRetrieval(
         DWORD dwFlags,
         void *pvReserved
        );

BOOL

CryptCancelAsyncRetrieval (
     HCRYPTASYNC hAsyncRetrieval
    );
typedef void ( *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC) (
     LPVOID pvCompletion,
     DWORD dwCompletionCode,
     LPCSTR pszUrl,
     LPSTR pszObjectOid,
     LPVOID pvObject
    );
typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION {
     PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
     LPVOID pvCompletion;
} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
typedef BOOL ( *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC) (
     HCRYPTASYNC hAsyncRetrieve
    );
typedef struct _CRYPT_URL_ARRAY {
    DWORD   cUrl;
    LPWSTR* rgwszUrl;
} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;
typedef struct _CRYPT_URL_INFO {
    DWORD   cbSize;
    DWORD   dwSyncDeltaTime;
    DWORD   cGroup;
    DWORD   *rgcGroupEntry;
} CRYPT_URL_INFO, *PCRYPT_URL_INFO;

BOOL

CryptGetObjectUrl (
     LPCSTR pszUrlOid,
     LPVOID pvPara,
     DWORD dwFlags,
     PCRYPT_URL_ARRAY pUrlArray,
     DWORD* pcbUrlArray,
     PCRYPT_URL_INFO pUrlInfo,
     DWORD* pcbUrlInfo,
     LPVOID pvReserved
    );
typedef struct _CERT_CRL_CONTEXT_PAIR {
    PCCERT_CONTEXT          pCertContext;
    PCCRL_CONTEXT           pCrlContext;
} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;
typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
    DWORD                       cbSize;
    int                         iDeltaCrlIndicator;
    LPFILETIME                  pftCacheResync;
    LPFILETIME                  pLastSyncTime;
    LPFILETIME                  pMaxAgeTime;
} CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO,
    *PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;

BOOL

CryptGetTimeValidObject (
     LPCSTR pszTimeValidOid,
     LPVOID pvPara,
     PCCERT_CONTEXT pIssuer,
     LPFILETIME pftValidFor,
     DWORD dwFlags,
     DWORD dwTimeout,
     LPVOID* ppvObject,
     PCRYPT_CREDENTIALS pCredentials,
     PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO pExtraInfo
    );

BOOL

CryptFlushTimeValidObject (
      LPCSTR pszFlushTimeValidOid,
      LPVOID pvPara,
      PCCERT_CONTEXT pIssuer,
      DWORD dwFlags,
      LPVOID pvReserved
     );
typedef struct  _CRYPTPROTECT_PROMPTSTRUCT
{
    DWORD cbSize;
    DWORD dwPromptFlags;
    HWND  hwndApp;
    LPCWSTR szPrompt;
} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;

BOOL

CryptProtectData(
                  DATA_BLOB*      pDataIn,
            LPCWSTR         szDataDescr,
          DATA_BLOB*      pOptionalEntropy,
          PVOID           pvReserved,
          CRYPTPROTECT_PROMPTSTRUCT*  pPromptStruct,
                  DWORD           dwFlags,
                 DATA_BLOB*      pDataOut
    );

BOOL

CryptUnprotectData(
                  DATA_BLOB*      pDataIn,
     LPWSTR*     ppszDataDescr,
          DATA_BLOB*      pOptionalEntropy,
          PVOID           pvReserved,
          CRYPTPROTECT_PROMPTSTRUCT*  pPromptStruct,
                  DWORD           dwFlags,
                 DATA_BLOB*      pDataOut
    );

BOOL

CryptUpdateProtectedState(
            PSID            pOldSid,
            LPCWSTR         pwszOldPassword,
                DWORD           dwFlags,
           DWORD           *pdwSuccessCount,
           DWORD           *pdwFailureCount);

BOOL

CryptProtectMemory(
               LPVOID          pDataIn,
                  DWORD           cbDataIn,
                  DWORD           dwFlags
    );

BOOL

CryptUnprotectMemory(
               LPVOID          pDataIn,
                  DWORD           cbDataIn,
                  DWORD           dwFlags
    );

PCCERT_CONTEXT

CertCreateSelfSignCertificate(
      HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
          PCERT_NAME_BLOB             pSubjectIssuerBlob,
          DWORD                       dwFlags,
      PCRYPT_KEY_PROV_INFO        pKeyProvInfo,
      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
      PSYSTEMTIME                 pStartTime,
      PSYSTEMTIME                 pEndTime,
      PCERT_EXTENSIONS            pExtensions
    );

BOOL

CryptGetKeyIdentifierProperty(
     const CRYPT_HASH_BLOB *pKeyIdentifier,
     DWORD dwPropId,
     DWORD dwFlags,
     LPCWSTR pwszComputerName,
     void *pvReserved,
     void *pvData,
     DWORD *pcbData
    );

BOOL

CryptSetKeyIdentifierProperty(
     const CRYPT_HASH_BLOB *pKeyIdentifier,
     DWORD dwPropId,
     DWORD dwFlags,
     LPCWSTR pwszComputerName,
     void *pvReserved,
     const void *pvData
    );
typedef BOOL ( *PFN_CRYPT_ENUM_KEYID_PROP)(
     const CRYPT_HASH_BLOB *pKeyIdentifier,
     DWORD dwFlags,
     void *pvReserved,
     void *pvArg,
     DWORD cProp,
     DWORD *rgdwPropId,
     void **rgpvData,
     DWORD *rgcbData
    );

BOOL

CryptEnumKeyIdentifierProperties(
     const CRYPT_HASH_BLOB *pKeyIdentifier,
     DWORD dwPropId,
     DWORD dwFlags,
     LPCWSTR pwszComputerName,
     void *pvReserved,
     void *pvArg,
     PFN_CRYPT_ENUM_KEYID_PROP pfnEnum
    );

BOOL

CryptCreateKeyIdentifierFromCSP(
     DWORD dwCertEncodingType,
     LPCSTR pszPubKeyOID,
     const PUBLICKEYSTRUC *pPubKeyStruc,
     DWORD cbPubKeyStruc,
     DWORD dwFlags,
     void *pvReserved,
     BYTE *pbHash,
     DWORD *pcbHash
    );
typedef HANDLE HCERTCHAINENGINE;
typedef struct _CERT_CHAIN_ENGINE_CONFIG {
    DWORD       cbSize;
    HCERTSTORE  hRestrictedRoot;
    HCERTSTORE  hRestrictedTrust;
    HCERTSTORE  hRestrictedOther;
    DWORD       cAdditionalStore;
    HCERTSTORE* rghAdditionalStore;
    DWORD       dwFlags;
    DWORD       dwUrlRetrievalTimeout;
    DWORD       MaximumCachedCertificates;
    DWORD       CycleDetectionModulus;
} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;

BOOL

CertCreateCertificateChainEngine (
     PCERT_CHAIN_ENGINE_CONFIG pConfig,
     HCERTCHAINENGINE* phChainEngine
    );

void

CertFreeCertificateChainEngine (
     HCERTCHAINENGINE hChainEngine
    );

BOOL

CertResyncCertificateChainEngine (
     HCERTCHAINENGINE hChainEngine
    );
typedef struct _CERT_TRUST_STATUS {
    DWORD dwErrorStatus;
    DWORD dwInfoStatus;
} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
typedef struct _CERT_REVOCATION_INFO {
    DWORD                       cbSize;
    DWORD                       dwRevocationResult;
    LPCSTR                      pszRevocationOid;
    LPVOID                      pvOidSpecificInfo;
    BOOL                        fHasFreshnessTime;
    DWORD                       dwFreshnessTime;
    PCERT_REVOCATION_CRL_INFO   pCrlInfo;
} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
typedef struct _CERT_TRUST_LIST_INFO {
    DWORD         cbSize;
    PCTL_ENTRY    pCtlEntry;
    PCCTL_CONTEXT pCtlContext;
} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
typedef struct _CERT_CHAIN_ELEMENT {
    DWORD                 cbSize;
    PCCERT_CONTEXT        pCertContext;
    CERT_TRUST_STATUS     TrustStatus;
    PCERT_REVOCATION_INFO pRevocationInfo;
    PCERT_ENHKEY_USAGE    pIssuanceUsage;
    PCERT_ENHKEY_USAGE    pApplicationUsage;
    LPCWSTR               pwszExtendedErrorInfo;
} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
typedef struct _CERT_SIMPLE_CHAIN {
    DWORD                 cbSize;
    CERT_TRUST_STATUS     TrustStatus;
    DWORD                 cElement;
    PCERT_CHAIN_ELEMENT*  rgpElement;
    PCERT_TRUST_LIST_INFO pTrustListInfo;
    BOOL                   fHasRevocationFreshnessTime;
    DWORD                  dwRevocationFreshnessTime;
} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
struct _CERT_CHAIN_CONTEXT {
    DWORD                   cbSize;
    CERT_TRUST_STATUS       TrustStatus;
    DWORD                   cChain;
    PCERT_SIMPLE_CHAIN*     rgpChain;
    DWORD                   cLowerQualityChainContext;
    PCCERT_CHAIN_CONTEXT*   rgpLowerQualityChainContext;
    BOOL                    fHasRevocationFreshnessTime;
    DWORD                   dwRevocationFreshnessTime;
    DWORD                   dwCreateFlags;
    GUID                    ChainId;
};
typedef struct _CERT_USAGE_MATCH {
    DWORD             dwType;
    CERT_ENHKEY_USAGE Usage;
} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
typedef struct _CTL_USAGE_MATCH {
    DWORD     dwType;
    CTL_USAGE Usage;
} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;
typedef struct _CERT_CHAIN_PARA {
    DWORD            cbSize;
    CERT_USAGE_MATCH RequestedUsage;
} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;

BOOL

CertGetCertificateChain (
     HCERTCHAINENGINE hChainEngine,
     PCCERT_CONTEXT pCertContext,
     LPFILETIME pTime,
     HCERTSTORE hAdditionalStore,
     PCERT_CHAIN_PARA pChainPara,
     DWORD dwFlags,
     LPVOID pvReserved,
     PCCERT_CHAIN_CONTEXT* ppChainContext
    );

void

CertFreeCertificateChain (
     PCCERT_CHAIN_CONTEXT pChainContext
    );

PCCERT_CHAIN_CONTEXT

CertDuplicateCertificateChain (
     PCCERT_CHAIN_CONTEXT pChainContext
    );
typedef struct _CRL_REVOCATION_INFO {
    PCRL_ENTRY           pCrlEntry;
    PCCRL_CONTEXT        pCrlContext;
    PCCERT_CHAIN_CONTEXT pCrlIssuerChain;
} CRL_REVOCATION_INFO, *PCRL_REVOCATION_INFO;

PCCERT_CHAIN_CONTEXT

CertFindChainInStore(
     HCERTSTORE hCertStore,
     DWORD dwCertEncodingType,
     DWORD dwFindFlags,
     DWORD dwFindType,
     const void *pvFindPara,
     PCCERT_CHAIN_CONTEXT pPrevChainContext
    );
typedef BOOL ( *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(
     PCCERT_CONTEXT pCert,
     void *pvFindArg
    );
typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
    DWORD                                   cbSize;
    LPCSTR                                  pszUsageIdentifier;
    DWORD                                   dwKeySpec;
    DWORD                                   dwAcquirePrivateKeyFlags;
    DWORD                                   cIssuer;
    CERT_NAME_BLOB                          *rgIssuer;
    PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
    void                                    *pvFindArg;
} CERT_CHAIN_FIND_ISSUER_PARA, *PCERT_CHAIN_FIND_ISSUER_PARA,
    CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
typedef struct _CERT_CHAIN_POLICY_PARA {
    DWORD                   cbSize;
    DWORD                   dwFlags;
    void                    *pvExtraPolicyPara;
} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
typedef struct _CERT_CHAIN_POLICY_STATUS {
    DWORD                   cbSize;
    DWORD                   dwError;
    LONG                    lChainIndex;
    LONG                    lElementIndex;
    void                    *pvExtraPolicyStatus;
} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;

BOOL

CertVerifyCertificateChainPolicy(
     LPCSTR pszPolicyOID,
     PCCERT_CHAIN_CONTEXT pChainContext,
     PCERT_CHAIN_POLICY_PARA pPolicyPara,
     PCERT_CHAIN_POLICY_STATUS pPolicyStatus
    );
typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
    DWORD               cbSize;
    DWORD               dwRegPolicySettings;
    PCMSG_SIGNER_INFO   pSignerInfo;
} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,
    *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
    DWORD               cbSize;
    BOOL                fCommercial;
} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,
    *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
    DWORD               cbSize;
    DWORD               dwRegPolicySettings;
    BOOL                fCommercial;
} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,
    *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
typedef struct _HTTPSPolicyCallbackData
{
    union {
        DWORD           cbStruct;
        DWORD           cbSize;
    };
    DWORD           dwAuthType;
    DWORD           fdwChecks;
    WCHAR           *pwszServerName;
} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,
    SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;

BOOL

CryptStringToBinaryA(
     LPCSTR pszString,
     DWORD cchString,
     DWORD dwFlags,
     BYTE *pbBinary,
     DWORD  *pcbBinary,
     DWORD *pdwSkip,
     DWORD *pdwFlags
    );

BOOL

CryptStringToBinaryW(
     LPCWSTR pszString,
     DWORD cchString,
     DWORD dwFlags,
     BYTE *pbBinary,
     DWORD  *pcbBinary,
     DWORD *pdwSkip,
     DWORD *pdwFlags
    );

BOOL

CryptBinaryToStringA(
     const BYTE *pbBinary,
     DWORD cbBinary,
     DWORD dwFlags,
     LPSTR pszString,
     DWORD *pcchString
    );

BOOL

CryptBinaryToStringW(
     const BYTE *pbBinary,
     DWORD cbBinary,
     DWORD dwFlags,
     LPWSTR pszString,
     DWORD *pcchString
    );
typedef struct _CRYPT_PKCS12_PBE_PARAMS
{
    int                 iIterations;
    ULONG               cbSalt;
}
CRYPT_PKCS12_PBE_PARAMS;

HCERTSTORE

PFXImportCertStore(
     CRYPT_DATA_BLOB* pPFX,
     LPCWSTR szPassword,
     DWORD   dwFlags);

BOOL

PFXIsPFXBlob(
     CRYPT_DATA_BLOB* pPFX);

BOOL

PFXVerifyPassword(
     CRYPT_DATA_BLOB* pPFX,
     LPCWSTR szPassword,
     DWORD dwFlags);

BOOL

PFXExportCertStoreEx(
     HCERTSTORE hStore,
     CRYPT_DATA_BLOB* pPFX,
     LPCWSTR szPassword,
     void* pvReserved,
     DWORD dwFlags);

BOOL

PFXExportCertStore(
     HCERTSTORE hStore,
     CRYPT_DATA_BLOB* pPFX,
     LPCWSTR szPassword,
     DWORD dwFlags);
typedef void *HCERT_SERVER_OCSP_RESPONSE;

HCERT_SERVER_OCSP_RESPONSE

CertOpenServerOcspResponse(
     PCCERT_CHAIN_CONTEXT pChainContext,
     DWORD dwFlags,
     LPVOID pvReserved
    );

void

CertAddRefServerOcspResponse(
     HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse
    );

void

CertCloseServerOcspResponse(
     HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
     DWORD dwFlags
    );
typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT
    CERT_SERVER_OCSP_RESPONSE_CONTEXT,
    *PCERT_SERVER_OCSP_RESPONSE_CONTEXT;
typedef const CERT_SERVER_OCSP_RESPONSE_CONTEXT
    *PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT {
    DWORD       cbSize;
    BYTE        *pbEncodedOcspResponse;
    DWORD       cbEncodedOcspResponse;
};

PCCERT_SERVER_OCSP_RESPONSE_CONTEXT

CertGetServerOcspResponseContext(
     HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
     DWORD dwFlags,
     LPVOID pvReserved
    );

void

CertAddRefServerOcspResponseContext(
     PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
    );

void

CertFreeServerOcspResponseContext(
     PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
    );

BOOL

CertRetrieveLogoOrBiometricInfo(
     PCCERT_CONTEXT pCertContext,
     LPCSTR lpszLogoOrBiometricType,
     DWORD dwRetrievalFlags,
     DWORD dwTimeout,
     DWORD dwFlags,
     void *pvReserved,
     BYTE **ppbData,
     DWORD *pcbData,
     LPWSTR *ppwszMimeType
    );
typedef struct _CERTIFICATE_BLOB {
    DWORD   dwCertEncodingType;
    DWORD   cbData;
    PBYTE    pbData;
} EFS_CERTIFICATE_BLOB, *PEFS_CERTIFICATE_BLOB;
typedef struct _EFS_HASH_BLOB {
    DWORD   cbData;
    PBYTE    pbData;
} EFS_HASH_BLOB, *PEFS_HASH_BLOB;
typedef struct _EFS_RPC_BLOB {
    DWORD   cbData;
    PBYTE    pbData;
} EFS_RPC_BLOB, *PEFS_RPC_BLOB;
typedef struct _EFS_PIN_BLOB {
    DWORD   cbPadding;
    DWORD   cbData;
    PBYTE    pbData;
} EFS_PIN_BLOB, *PEFS_PIN_BLOB;
typedef struct _EFS_KEY_INFO {
    DWORD   dwVersion;
    ULONG   Entropy;
    ALG_ID  Algorithm;
    ULONG   KeyLength;
} EFS_KEY_INFO, *PEFS_KEY_INFO;
typedef struct _EFS_DECRYPTION_STATUS_INFO {
    DWORD   dwDecryptionError;
    DWORD   dwHashOffset;
    DWORD   cbHash;
} EFS_DECRYPTION_STATUS_INFO, *PEFS_DECRYPTION_STATUS_INFO;
typedef struct _EFS_ENCRYPTION_STATUS_INFO {
    BOOL    bHasCurrentKey;
    DWORD   dwEncryptionError;
} EFS_ENCRYPTION_STATUS_INFO, *PEFS_ENCRYPTION_STATUS_INFO;
typedef struct _ENCRYPTION_CERTIFICATE {
    DWORD cbTotalLength;
    SID * pUserSid;
    PEFS_CERTIFICATE_BLOB pCertBlob;
} ENCRYPTION_CERTIFICATE, *PENCRYPTION_CERTIFICATE;
typedef struct _ENCRYPTION_CERTIFICATE_HASH {
    DWORD cbTotalLength;
    SID * pUserSid;
    PEFS_HASH_BLOB  pHash;
    LPWSTR lpDisplayInformation;
} ENCRYPTION_CERTIFICATE_HASH, *PENCRYPTION_CERTIFICATE_HASH;
typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST {
    DWORD nCert_Hash;
     PENCRYPTION_CERTIFICATE_HASH * pUsers;
} ENCRYPTION_CERTIFICATE_HASH_LIST, *PENCRYPTION_CERTIFICATE_HASH_LIST;
typedef struct _ENCRYPTION_CERTIFICATE_LIST {
    DWORD nUsers;
     PENCRYPTION_CERTIFICATE * pUsers;
} ENCRYPTION_CERTIFICATE_LIST, *PENCRYPTION_CERTIFICATE_LIST;
typedef struct _ENCRYPTED_FILE_METADATA_SIGNATURE {
	DWORD								dwEfsAccessType;
	PENCRYPTION_CERTIFICATE_HASH_LIST	pCertificatesAdded;
    PENCRYPTION_CERTIFICATE				pEncryptionCertificate;
    PEFS_RPC_BLOB						pEfsStreamSignature;
} ENCRYPTED_FILE_METADATA_SIGNATURE, *PENCRYPTED_FILE_METADATA_SIGNATURE;

DWORD

QueryUsersOnEncryptedFile(
                LPCWSTR                                 lpFileName,
         PENCRYPTION_CERTIFICATE_HASH_LIST      *pUsers
    );

DWORD

QueryRecoveryAgentsOnEncryptedFile(
                LPCWSTR                                 lpFileName,
         PENCRYPTION_CERTIFICATE_HASH_LIST      *pRecoveryAgents
    );

DWORD

RemoveUsersFromEncryptedFile(
        LPCWSTR                             lpFileName,
        PENCRYPTION_CERTIFICATE_HASH_LIST   pHashes
    );

DWORD

AddUsersToEncryptedFile(
        LPCWSTR                         lpFileName,
        PENCRYPTION_CERTIFICATE_LIST    pEncryptionCertificates
    );

DWORD

SetUserFileEncryptionKey(
        PENCRYPTION_CERTIFICATE     pEncryptionCertificate
    );

DWORD

SetUserFileEncryptionKeyEx(
                PENCRYPTION_CERTIFICATE     pEncryptionCertificate,
                    DWORD                       dwCapabilities,
                    DWORD                       dwFlags,
          LPVOID                      pvReserved
    );

void

FreeEncryptionCertificateHashList(
        PENCRYPTION_CERTIFICATE_HASH_LIST       pUsers
    );

BOOL

EncryptionDisable(
     LPCWSTR DirPath,
         BOOL        Disable
    );

DWORD

DuplicateEncryptionInfoFile(
            LPCWSTR SrcFileName,
            LPCWSTR DstFileName,
                DWORD                           dwCreationDistribution,
                DWORD                           dwAttributes,
        const LPSECURITY_ATTRIBUTES     lpSecurityAttributes
     );

DWORD

GetEncryptedFileMetadata(
                                    LPCWSTR     lpFileName,
                                   PDWORD      pcbMetadata,
        PBYTE      *ppbMetadata
    );

DWORD

SetEncryptedFileMetadata(
            LPCWSTR                             lpFileName,
        PBYTE                               pbOldMetadata,
            PBYTE                               pbNewMetadata,
            PENCRYPTION_CERTIFICATE_HASH        pOwnerHash,
                DWORD                               dwOperation,
        PENCRYPTION_CERTIFICATE_HASH_LIST   pCertificatesAdded
    );

void

FreeEncryptedFileMetadata(
        PBYTE   pbMetadata
    );
typedef struct
{
   RPC_NS_HANDLE        LookupContext;
   RPC_BINDING_HANDLE   ProposedHandle;
   RPC_BINDING_VECTOR * Bindings;
} RPC_IMPORT_CONTEXT_P, * PRPC_IMPORT_CONTEXT_P;

RPC_STATUS

I_RpcNsGetBuffer(
     PRPC_MESSAGE Message
    );

RPC_STATUS

I_RpcNsSendReceive(
     PRPC_MESSAGE Message,
     RPC_BINDING_HANDLE  * Handle
    );

void

I_RpcNsRaiseException(
     PRPC_MESSAGE Message,
     RPC_STATUS Status
    );

RPC_STATUS

I_RpcReBindBuffer(
     PRPC_MESSAGE Message
    );

RPC_STATUS

I_NsServerBindSearch(
    void
    );

RPC_STATUS

I_NsClientBindSearch(
    void
    );

void

I_NsClientBindDone(
    void
    );
typedef unsigned char byte;
typedef byte cs_byte;
typedef unsigned char boolean;
void  *  MIDL_user_allocate(size_t size);
void              MIDL_user_free(  void  * );
void *  I_RpcDefaultAllocate(
         handle_t bh, size_t size, void * (* RealAlloc)(size_t) );
void  I_RpcDefaultFree(
         handle_t bh, void *, void (*RealFree)(void *) );
typedef void  * NDR_CCONTEXT;
typedef struct
    {
    void  * pad[2];
    void  * userContext;
    }  * NDR_SCONTEXT;
typedef void (  * NDR_RUNDOWN)(void  * context);
typedef void (  * NDR_NOTIFY_ROUTINE)(void);
typedef void (  * NDR_NOTIFY2_ROUTINE)(boolean flag);
typedef struct _SCONTEXT_QUEUE {
    unsigned long   NumberOfObjects;
    NDR_SCONTEXT  * ArrayOfObjects;
    } SCONTEXT_QUEUE,  * PSCONTEXT_QUEUE;

RPC_BINDING_HANDLE

NDRCContextBinding (
     NDR_CCONTEXT     CContext
    );

void

NDRCContextMarshall (
      NDR_CCONTEXT    CContext,
     void  *pBuff
    );

void

NDRCContextUnmarshall (
     NDR_CCONTEXT        *   pCContext,
      RPC_BINDING_HANDLE      hBinding,
      void                *   pBuff,
      unsigned long           DataRepresentation
    );

void

NDRCContextUnmarshall2 (
     NDR_CCONTEXT        *   pCContext,
      RPC_BINDING_HANDLE      hBinding,
      void                *   pBuff,
      unsigned long           DataRepresentation
    );

void

NDRSContextMarshall (
      NDR_SCONTEXT    CContext,
     void          * pBuff,
      NDR_RUNDOWN     userRunDownIn
    );

NDR_SCONTEXT

NDRSContextUnmarshall (
      void          * pBuff,
      unsigned long   DataRepresentation
    );

void

NDRSContextMarshallEx (
      RPC_BINDING_HANDLE  BindingHandle,
      NDR_SCONTEXT        CContext,
     void              * pBuff,
      NDR_RUNDOWN         userRunDownIn
    );

void

NDRSContextMarshall2 (
      RPC_BINDING_HANDLE  BindingHandle,
      NDR_SCONTEXT        CContext,
     void              * pBuff,
      NDR_RUNDOWN         userRunDownIn,
      void              * CtxGuard,
     unsigned long        Flags
    );

NDR_SCONTEXT

NDRSContextUnmarshallEx (
      RPC_BINDING_HANDLE  BindingHandle,
      void              * pBuff,
      unsigned long       DataRepresentation
    );

NDR_SCONTEXT

NDRSContextUnmarshall2(
      RPC_BINDING_HANDLE  BindingHandle,
      void              * pBuff,
      unsigned long       DataRepresentation,
      void              * CtxGuard,
     unsigned long        Flags
    );

void

RpcSsDestroyClientContext (
     void  *  * ContextHandle
    );
typedef unsigned long error_status_t;
struct _MIDL_STUB_MESSAGE;
struct _MIDL_STUB_DESC;
struct _FULL_PTR_XLAT_TABLES;
typedef unsigned char  *    RPC_BUFPTR;
typedef unsigned long       RPC_LENGTH;
typedef void (  * EXPR_EVAL)( struct _MIDL_STUB_MESSAGE  * );
typedef const unsigned char  * PFORMAT_STRING;
typedef struct
    {
    long              Dimension;
    unsigned long  *  BufferConformanceMark;
    unsigned long  *  BufferVarianceMark;
    unsigned long  *  MaxCountArray;
    unsigned long  *  OffsetArray;
    unsigned long  *  ActualCountArray;
    } ARRAY_INFO,  *PARRAY_INFO;
typedef struct _NDR_ASYNC_MESSAGE *   PNDR_ASYNC_MESSAGE;
typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;
typedef const unsigned char  * PFORMAT_STRING;
typedef struct _MIDL_SYNTAX_INFO MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;
struct NDR_ALLOC_ALL_NODES_CONTEXT;
struct NDR_POINTER_QUEUE_STATE;
struct _NDR_PROC_CONTEXT;
typedef struct _MIDL_STUB_MESSAGE
    {
    PRPC_MESSAGE            RpcMsg;
    unsigned char       *   Buffer;
    unsigned char       *   BufferStart;
    unsigned char       *   BufferEnd;
    unsigned char       *   BufferMark;
    unsigned long           BufferLength;
    unsigned long           MemorySize;
    unsigned char       *   Memory;
    unsigned char           IsClient;
    unsigned char           Pad;
    unsigned short          uFlags2;
    int                     ReuseBuffer;
    struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;
    struct NDR_POINTER_QUEUE_STATE     *pPointerQueueState;
    int                     IgnoreEmbeddedPointers;
    unsigned char       *   PointerBufferMark;
    unsigned char           CorrDespIncrement;
    unsigned char           uFlags;
    unsigned short          UniquePtrCount;
    ULONG_PTR               MaxCount;
    unsigned long           Offset;
    unsigned long           ActualCount;
    void  *             (  * pfnAllocate)( size_t );
    void                    (  * pfnFree)(void  *);
    unsigned char       *   StackTop;
    unsigned char       *   pPresentedType;
    unsigned char       *   pTransmitType;
    handle_t                SavedHandle;
    const struct _MIDL_STUB_DESC  * StubDesc;
    struct _FULL_PTR_XLAT_TABLES  * FullPtrXlatTables;
    unsigned long                   FullPtrRefId;
    unsigned long                   PointerLength;
    int                             fInDontFree       :1;
    int                             fDontCallFreeInst :1;
    int                             fInOnlyParam      :1;
    int                             fHasReturn        :1;
    int                             fHasExtensions    :1;
    int                             fHasNewCorrDesc   :1;
    int                             fIsIn             :1;
    int                             fIsOut            :1;
    int                             fIsOicf           :1;
    int                             fBufferValid      :1;
    int                             fHasMemoryValidateCallback: 1;
    int                             fInFree             :1;
    int                             fNeedMCCP         :1;
    int                             fUnused           :3;
    int                             fUnused2          :16;
    unsigned long                   dwDestContext;
    void  *                         pvDestContext;
    NDR_SCONTEXT *                  SavedContextHandles;
    long                            ParamNumber;
    struct IRpcChannelBuffer    *   pRpcChannelBuffer;
    PARRAY_INFO                     pArrayInfo;
    unsigned long           *       SizePtrCountArray;
    unsigned long           *       SizePtrOffsetArray;
    unsigned long           *       SizePtrLengthArray;
    void                    *       pArgQueue;
    unsigned long                   dwStubPhase;
    void                    *       LowStackMark;
    PNDR_ASYNC_MESSAGE              pAsyncMsg;
    PNDR_CORRELATION_INFO           pCorrInfo;
    unsigned char *                 pCorrMemory;
    void *                          pMemoryList;
    INT_PTR                         pCSInfo;
    unsigned char *                 ConformanceMark;
    unsigned char *                 VarianceMark;
    INT_PTR                         Unused;
    struct _NDR_PROC_CONTEXT *      pContext;
    void *                             ContextHandleHash;
    void *                             pUserMarshalList;
    INT_PTR                         Reserved51_3;
    INT_PTR                         Reserved51_4;
    INT_PTR                         Reserved51_5;
    } MIDL_STUB_MESSAGE,  *PMIDL_STUB_MESSAGE;
typedef  struct _MIDL_STUB_MESSAGE MIDL_STUB_MESSAGE,   *PMIDL_STUB_MESSAGE;
typedef void  *
        (  * GENERIC_BINDING_ROUTINE)
        (void  *);
typedef void
        (  * GENERIC_UNBIND_ROUTINE)
        (void  *, unsigned char  *);
typedef struct _GENERIC_BINDING_ROUTINE_PAIR
    {
    GENERIC_BINDING_ROUTINE     pfnBind;
    GENERIC_UNBIND_ROUTINE      pfnUnbind;
    } GENERIC_BINDING_ROUTINE_PAIR,  *PGENERIC_BINDING_ROUTINE_PAIR;
typedef struct __GENERIC_BINDING_INFO
    {
    void  *            pObj;
    unsigned int                Size;
    GENERIC_BINDING_ROUTINE     pfnBind;
    GENERIC_UNBIND_ROUTINE      pfnUnbind;
    } GENERIC_BINDING_INFO,  *PGENERIC_BINDING_INFO;
typedef void (  * XMIT_HELPER_ROUTINE)
    ( PMIDL_STUB_MESSAGE );
typedef struct _XMIT_ROUTINE_QUINTUPLE
    {
    XMIT_HELPER_ROUTINE     pfnTranslateToXmit;
    XMIT_HELPER_ROUTINE     pfnTranslateFromXmit;
    XMIT_HELPER_ROUTINE     pfnFreeXmit;
    XMIT_HELPER_ROUTINE     pfnFreeInst;
    } XMIT_ROUTINE_QUINTUPLE,  *PXMIT_ROUTINE_QUINTUPLE;
typedef unsigned long
(  * USER_MARSHAL_SIZING_ROUTINE)
    (unsigned long  *,
     unsigned long,
     void  * );
typedef unsigned char  *
(  * USER_MARSHAL_MARSHALLING_ROUTINE)
    (unsigned long  *,
     unsigned char  * ,
     void  * );
typedef unsigned char  *
(  * USER_MARSHAL_UNMARSHALLING_ROUTINE)
    (unsigned long  *,
     unsigned char  *,
     void  * );
typedef void (  * USER_MARSHAL_FREEING_ROUTINE)
    (unsigned long  *,
     void  * );
typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE
    {
    USER_MARSHAL_SIZING_ROUTINE          pfnBufferSize;
    USER_MARSHAL_MARSHALLING_ROUTINE     pfnMarshall;
    USER_MARSHAL_UNMARSHALLING_ROUTINE   pfnUnmarshall;
    USER_MARSHAL_FREEING_ROUTINE         pfnFree;
    } USER_MARSHAL_ROUTINE_QUADRUPLE;
typedef enum _USER_MARSHAL_CB_TYPE
{
    USER_MARSHAL_CB_BUFFER_SIZE,
    USER_MARSHAL_CB_MARSHALL,
    USER_MARSHAL_CB_UNMARSHALL,
    USER_MARSHAL_CB_FREE
} USER_MARSHAL_CB_TYPE;
typedef struct _USER_MARSHAL_CB
{
    unsigned long           Flags;
    PMIDL_STUB_MESSAGE      pStubMsg;
    PFORMAT_STRING          pReserve;
    unsigned long           Signature;
    USER_MARSHAL_CB_TYPE    CBType;
    PFORMAT_STRING          pFormat;
    PFORMAT_STRING          pTypeFormat;
} USER_MARSHAL_CB;
typedef struct _MALLOC_FREE_STRUCT
    {
    void  *     (  * pfnAllocate)(size_t);
    void        (  * pfnFree)(void  *);
    } MALLOC_FREE_STRUCT;
typedef struct _COMM_FAULT_OFFSETS
    {
    short       CommOffset;
    short       FaultOffset;
    } COMM_FAULT_OFFSETS;
typedef enum _IDL_CS_CONVERT
    {
    IDL_CS_NO_CONVERT,
    IDL_CS_IN_PLACE_CONVERT,
    IDL_CS_NEW_BUFFER_CONVERT
    } IDL_CS_CONVERT;
typedef void
(  * CS_TYPE_NET_SIZE_ROUTINE)
    (RPC_BINDING_HANDLE     hBinding,
     unsigned long          ulNetworkCodeSet,
     unsigned long          ulLocalBufferSize,
     IDL_CS_CONVERT     *   conversionType,
     unsigned long      *   pulNetworkBufferSize,
     error_status_t     *   pStatus);
typedef void
(  * CS_TYPE_LOCAL_SIZE_ROUTINE)
    (RPC_BINDING_HANDLE     hBinding,
     unsigned long          ulNetworkCodeSet,
     unsigned long          ulNetworkBufferSize,
     IDL_CS_CONVERT     *   conversionType,
     unsigned long      *   pulLocalBufferSize,
     error_status_t     *   pStatus);
typedef void
(  * CS_TYPE_TO_NETCS_ROUTINE)
    (RPC_BINDING_HANDLE     hBinding,
     unsigned long          ulNetworkCodeSet,
     void               *   pLocalData,
     unsigned long          ulLocalDataLength,
     byte               *   pNetworkData,
     unsigned long      *   pulNetworkDataLength,
     error_status_t     *   pStatus);
typedef void
(  * CS_TYPE_FROM_NETCS_ROUTINE)
    (RPC_BINDING_HANDLE     hBinding,
     unsigned long          ulNetworkCodeSet,
     byte               *   pNetworkData,
     unsigned long          ulNetworkDataLength,
     unsigned long          ulLocalBufferSize,
     void               *   pLocalData,
     unsigned long      *   pulLocalDataLength,
     error_status_t     *   pStatus);
typedef void
(  * CS_TAG_GETTING_ROUTINE)
    (RPC_BINDING_HANDLE     hBinding,
     int                    fServerSide,
     unsigned long      *   pulSendingTag,
     unsigned long      *   pulDesiredReceivingTag,
     unsigned long      *   pulReceivingTag,
     error_status_t     *   pStatus);
void
RpcCsGetTags(
     RPC_BINDING_HANDLE     hBinding,
     int                    fServerSide,
     unsigned long      *   pulSendingTag,
     unsigned long      *   pulDesiredReceivingTag,
     unsigned long      *   pulReceivingTag,
     error_status_t     *   pStatus);
typedef struct _NDR_CS_SIZE_CONVERT_ROUTINES
    {
    CS_TYPE_NET_SIZE_ROUTINE    pfnNetSize;
    CS_TYPE_TO_NETCS_ROUTINE    pfnToNetCs;
    CS_TYPE_LOCAL_SIZE_ROUTINE  pfnLocalSize;
    CS_TYPE_FROM_NETCS_ROUTINE  pfnFromNetCs;
    } NDR_CS_SIZE_CONVERT_ROUTINES;
typedef struct _NDR_CS_ROUTINES
    {
    NDR_CS_SIZE_CONVERT_ROUTINES   *pSizeConvertRoutines;
    CS_TAG_GETTING_ROUTINE         *pTagGettingRoutines;
    } NDR_CS_ROUTINES;
typedef struct _NDR_EXPR_DESC
{
    const unsigned short * pOffset;
    PFORMAT_STRING  pFormatExpr;
} NDR_EXPR_DESC;
typedef struct _MIDL_STUB_DESC
    {
    void  *    RpcInterfaceInformation;
    void  *    (  * pfnAllocate)(size_t);
    void       (  * pfnFree)(void  *);
    union
        {
        handle_t  *             pAutoHandle;
        handle_t  *             pPrimitiveHandle;
        PGENERIC_BINDING_INFO   pGenericBindingInfo;
        } IMPLICIT_HANDLE_INFO;
    const NDR_RUNDOWN  *                    apfnNdrRundownRoutines;
    const GENERIC_BINDING_ROUTINE_PAIR  *   aGenericBindingRoutinePairs;
    const EXPR_EVAL  *                      apfnExprEval;
    const XMIT_ROUTINE_QUINTUPLE  *         aXmitQuintuple;
    const unsigned char  *                  pFormatTypes;
    int                                     fCheckBounds;
    unsigned long                           Version;
    MALLOC_FREE_STRUCT  *                   pMallocFreeStruct;
    long                                    MIDLVersion;
    const COMM_FAULT_OFFSETS  *    CommFaultOffsets;
    const USER_MARSHAL_ROUTINE_QUADRUPLE  * aUserMarshalQuadruple;
    const NDR_NOTIFY_ROUTINE  *             NotifyRoutineTable;
    ULONG_PTR                               mFlags;
    const NDR_CS_ROUTINES *                 CsRoutineTables;
    void *                                  ProxyServerInfo;
    const NDR_EXPR_DESC *               pExprInfo;
    } MIDL_STUB_DESC;
typedef const MIDL_STUB_DESC  * PMIDL_STUB_DESC;
typedef void  * PMIDL_XMIT_TYPE;
typedef struct _MIDL_FORMAT_STRING
    {
    short               Pad;
    unsigned char       Format[];
    } MIDL_FORMAT_STRING;
typedef void (  * STUB_THUNK)( PMIDL_STUB_MESSAGE );
typedef long (  * SERVER_ROUTINE)();
typedef struct  _MIDL_SERVER_INFO_
    {
    PMIDL_STUB_DESC                     pStubDesc;
    const SERVER_ROUTINE     *          DispatchTable;
    PFORMAT_STRING                      ProcString;
    const unsigned short *              FmtStringOffset;
    const STUB_THUNK *                  ThunkTable;
    PRPC_SYNTAX_IDENTIFIER              pTransferSyntax;
    ULONG_PTR                           nCount;
    PMIDL_SYNTAX_INFO                   pSyntaxInfo;
    } MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;
typedef struct _MIDL_STUBLESS_PROXY_INFO
    {
    PMIDL_STUB_DESC                     pStubDesc;
    PFORMAT_STRING                      ProcFormatString;
    const unsigned short            *   FormatStringOffset;
    PRPC_SYNTAX_IDENTIFIER              pTransferSyntax;
    ULONG_PTR                           nCount;
    PMIDL_SYNTAX_INFO                   pSyntaxInfo;
    } MIDL_STUBLESS_PROXY_INFO;
typedef MIDL_STUBLESS_PROXY_INFO  * PMIDL_STUBLESS_PROXY_INFO;
typedef struct _MIDL_SYNTAX_INFO
{
RPC_SYNTAX_IDENTIFIER               TransferSyntax;
RPC_DISPATCH_TABLE *                DispatchTable;
PFORMAT_STRING                      ProcString;
const unsigned short *              FmtStringOffset;
PFORMAT_STRING                      TypeString;
const void           *              aUserMarshalQuadruple;
ULONG_PTR                           pReserved1;
ULONG_PTR                           pReserved2;
} MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;
typedef unsigned short * PARAM_OFFSETTABLE, *PPARAM_OFFSETTABLE;
typedef union _CLIENT_CALL_RETURN
    {
    void  *         Pointer;
    LONG_PTR        Simple;
    } CLIENT_CALL_RETURN;
typedef enum
        {
        XLAT_SERVER = 1,
        XLAT_CLIENT
        } XLAT_SIDE;
typedef struct _FULL_PTR_XLAT_TABLES
{
    void * RefIdToPointer;
    void * PointerToRefId;
    unsigned long           NextRefId;
    XLAT_SIDE               XlatSide;
} FULL_PTR_XLAT_TABLES, *PFULL_PTR_XLAT_TABLES;
RPC_STATUS
NdrClientGetSupportedSyntaxes(
     RPC_CLIENT_INTERFACE * pInf,
     unsigned long       * pCount,
     MIDL_SYNTAX_INFO   ** pArr );
RPC_STATUS
NdrServerGetSupportedSyntaxes(
     RPC_SERVER_INTERFACE * pInf,
     unsigned long       * pCount,
     MIDL_SYNTAX_INFO   ** pArr,
     unsigned long       * pPreferSyntaxIndex);

void

NdrSimpleTypeMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    unsigned char           FormatChar
    );

unsigned char  *

NdrPointerMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrCsArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrCsTagMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrSimpleStructMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrConformantStructMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrConformantVaryingStructMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrComplexStructMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrFixedArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrConformantArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrConformantVaryingArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrVaryingArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrComplexArrayMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrNonConformantStringMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrConformantStringMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrEncapsulatedUnionMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrNonEncapsulatedUnionMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrByteCountPointerMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrXmitOrRepAsMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrUserMarshalMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrInterfacePointerMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrClientContextMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    NDR_CCONTEXT            ContextHandle,
    int                     fCheck
    );

void

NdrServerContextMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    NDR_SCONTEXT            ContextHandle,
    NDR_RUNDOWN             RundownRoutine
    );

void

NdrServerContextNewMarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    NDR_SCONTEXT            ContextHandle,
    NDR_RUNDOWN             RundownRoutine,
    PFORMAT_STRING          pFormat
    );

void

NdrSimpleTypeUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    unsigned char           FormatChar
    );

unsigned char *

NdrCsArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char **        ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char *

NdrCsTagUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char **        ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char *
NdrRangeUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char **        ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

void

NdrCorrelationInitialize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    void  *                 pMemory,
    unsigned long           CacheSize,
    unsigned long           flags
    );

void

NdrCorrelationPass(
    PMIDL_STUB_MESSAGE      pStubMsg
    );

void

NdrCorrelationFree(
    PMIDL_STUB_MESSAGE      pStubMsg
    );

unsigned char  *

NdrPointerUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrSimpleStructUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrConformantStructUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrConformantVaryingStructUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrComplexStructUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrFixedArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrConformantArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrConformantVaryingArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrVaryingArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrComplexArrayUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrNonConformantStringUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrConformantStringUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrEncapsulatedUnionUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrNonEncapsulatedUnionUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrByteCountPointerUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrXmitOrRepAsUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrUserMarshalUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

unsigned char  *

NdrInterfacePointerUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *  *     ppMemory,
    PFORMAT_STRING          pFormat,
    unsigned char           fMustAlloc
    );

void

NdrClientContextUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg,
    NDR_CCONTEXT        *   pContextHandle,
    RPC_BINDING_HANDLE      BindHandle
    );

NDR_SCONTEXT

NdrServerContextUnmarshall(
    PMIDL_STUB_MESSAGE      pStubMsg
    );

NDR_SCONTEXT

NdrContextHandleInitialize(
      PMIDL_STUB_MESSAGE  pStubMsg,
      PFORMAT_STRING      pFormat
    );

NDR_SCONTEXT

NdrServerContextNewUnmarshall(
      PMIDL_STUB_MESSAGE  pStubMsg,
      PFORMAT_STRING      pFormat
    );

void

NdrPointerBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrCsArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrCsTagBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrSimpleStructBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantStructBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantVaryingStructBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrComplexStructBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrFixedArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantVaryingArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrVaryingArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrComplexArrayBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantStringBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrNonConformantStringBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrEncapsulatedUnionBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrNonEncapsulatedUnionBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrByteCountPointerBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrXmitOrRepAsBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrUserMarshalBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrInterfacePointerBufferSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrContextHandleSize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrPointerMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrContextHandleMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrCsArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrCsTagMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrSimpleStructMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrConformantStructMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrConformantVaryingStructMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrComplexStructMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrFixedArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrConformantArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrConformantVaryingArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrVaryingArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrComplexArrayMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrConformantStringMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrNonConformantStringMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrEncapsulatedUnionMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrNonEncapsulatedUnionMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrXmitOrRepAsMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrUserMarshalMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned long

NdrInterfacePointerMemorySize(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

void

NdrPointerFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrCsArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrSimpleStructFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantStructFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantVaryingStructFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrComplexStructFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrFixedArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConformantVaryingArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrVaryingArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrComplexArrayFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrEncapsulatedUnionFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrNonEncapsulatedUnionFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrByteCountPointerFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrXmitOrRepAsFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrUserMarshalFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrInterfacePointerFree(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pMemory,
    PFORMAT_STRING          pFormat
    );

void

NdrConvert2(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat,
    long                    NumberParams
    );

void

NdrConvert(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat
    );

unsigned char  *

NdrUserMarshalSimpleTypeConvert(
    unsigned long *         pFlags,
    unsigned char *         pBuffer,
    unsigned char           FormatChar
    );

void

NdrClientInitializeNew(
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor,
    unsigned int            ProcNum
    );

unsigned char  *

NdrServerInitializeNew(
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor
    );

void

NdrServerInitializePartial(
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor,
    unsigned long           RequestedBufferSize
    );

void

NdrClientInitialize(
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor,
    unsigned int            ProcNum
    );

unsigned char  *

NdrServerInitialize(
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor
    );

unsigned char  *

NdrServerInitializeUnmarshall (
    PMIDL_STUB_MESSAGE      pStubMsg,
    PMIDL_STUB_DESC         pStubDescriptor,
    PRPC_MESSAGE            pRpcMsg
    );

void

NdrServerInitializeMarshall (
    PRPC_MESSAGE            pRpcMsg,
    PMIDL_STUB_MESSAGE      pStubMsg
    );

unsigned char  *

NdrGetBuffer(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned long           BufferLength,
    RPC_BINDING_HANDLE      Handle
    );

unsigned char  *

NdrNsGetBuffer(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned long           BufferLength,
    RPC_BINDING_HANDLE      Handle
    );

unsigned char  *

NdrSendReceive(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char *         pBufferEnd
    );

unsigned char  *

NdrNsSendReceive(
    PMIDL_STUB_MESSAGE      pStubMsg,
    unsigned char  *        pBufferEnd,
    RPC_BINDING_HANDLE  *   pAutoHandle
    );

void

NdrFreeBuffer(
    PMIDL_STUB_MESSAGE      pStubMsg
    );

RPC_STATUS

NdrGetDcomProtocolVersion(
    PMIDL_STUB_MESSAGE      pStubMsg,
    RPC_VERSION *           pVersion );
CLIENT_CALL_RETURN __cdecl
NdrClientCall2(
    PMIDL_STUB_DESC         pStubDescriptor,
    PFORMAT_STRING          pFormat,
    ...
    );
CLIENT_CALL_RETURN __cdecl
NdrClientCall(
    PMIDL_STUB_DESC         pStubDescriptor,
    PFORMAT_STRING          pFormat,
    ...
    );
CLIENT_CALL_RETURN __cdecl
NdrAsyncClientCall(
    PMIDL_STUB_DESC         pStubDescriptor,
    PFORMAT_STRING          pFormat,
    ...
    );
CLIENT_CALL_RETURN __cdecl
NdrDcomAsyncClientCall(
    PMIDL_STUB_DESC         pStubDescriptor,
    PFORMAT_STRING          pFormat,
    ...
    );
typedef enum {
    STUB_UNMARSHAL,
    STUB_CALL_SERVER,
    STUB_MARSHAL,
    STUB_CALL_SERVER_NO_HRESULT
}STUB_PHASE;
typedef enum {
    PROXY_CALCSIZE,
    PROXY_GETBUFFER,
    PROXY_MARSHAL,
    PROXY_SENDRECEIVE,
    PROXY_UNMARSHAL
}PROXY_PHASE;
struct IRpcStubBuffer;

void

NdrAsyncServerCall(
    PRPC_MESSAGE                pRpcMsg
    );

long

NdrAsyncStubCall(
    struct IRpcStubBuffer *     pThis,
    struct IRpcChannelBuffer *  pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long *             pdwStubPhase
    );

long

NdrDcomAsyncStubCall(
    struct IRpcStubBuffer    *  pThis,
    struct IRpcChannelBuffer *  pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long            *  pdwStubPhase
    );

long

NdrStubCall2(
    struct IRpcStubBuffer  *    pThis,
    struct IRpcChannelBuffer  * pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long  *            pdwStubPhase
    );

void

NdrServerCall2(
    PRPC_MESSAGE                pRpcMsg
    );

long

NdrStubCall (
    struct IRpcStubBuffer  *    pThis,
    struct IRpcChannelBuffer  * pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long  *            pdwStubPhase
    );

void

NdrServerCall(
    PRPC_MESSAGE                pRpcMsg
    );

int

NdrServerUnmarshall(
    struct IRpcChannelBuffer  * pChannel,
    PRPC_MESSAGE                pRpcMsg,
    PMIDL_STUB_MESSAGE          pStubMsg,
    PMIDL_STUB_DESC             pStubDescriptor,
    PFORMAT_STRING              pFormat,
    void  *                     pParamList
    );

void

NdrServerMarshall(
    struct IRpcStubBuffer  *    pThis,
    struct IRpcChannelBuffer  * pChannel,
    PMIDL_STUB_MESSAGE          pStubMsg,
    PFORMAT_STRING              pFormat
    );

RPC_STATUS

NdrMapCommAndFaultStatus(
    PMIDL_STUB_MESSAGE          pStubMsg,
    unsigned long  *            pCommStatus,
    unsigned long  *            pFaultStatus,
    RPC_STATUS                  Status
    );
typedef void  * RPC_SS_THREAD_HANDLE;
typedef void  *
RPC_CLIENT_ALLOC (
     size_t Size
    );
typedef void
RPC_CLIENT_FREE (
     void  * Ptr
    );

void  *

RpcSsAllocate (
     size_t Size
    );

void

RpcSsDisableAllocate (
    void
    );

void

RpcSsEnableAllocate (
    void
    );

void

RpcSsFree (
     void  * NodeToFree
    );

RPC_SS_THREAD_HANDLE

RpcSsGetThreadHandle (
    void
    );

void

RpcSsSetClientAllocFree (
     RPC_CLIENT_ALLOC  * ClientAlloc,
     RPC_CLIENT_FREE   * ClientFree
    );

void

RpcSsSetThreadHandle (
     RPC_SS_THREAD_HANDLE Id
    );

void

RpcSsSwapClientAllocFree (
     RPC_CLIENT_ALLOC     * ClientAlloc,
     RPC_CLIENT_FREE      * ClientFree,
     RPC_CLIENT_ALLOC *  * OldClientAlloc,
     RPC_CLIENT_FREE  *  * OldClientFree
    );

void  *

RpcSmAllocate (
      size_t          Size,
     RPC_STATUS  *   pStatus
    );

RPC_STATUS

RpcSmClientFree (
      void        *   pNodeToFree
    );

RPC_STATUS

RpcSmDestroyClientContext (
     void         * * ContextHandle
    );

RPC_STATUS

RpcSmDisableAllocate (
    void
    );

RPC_STATUS

RpcSmEnableAllocate (
    void
    );

RPC_STATUS

RpcSmFree (
     void         *   NodeToFree
    );

RPC_SS_THREAD_HANDLE

RpcSmGetThreadHandle (
     RPC_STATUS  *   pStatus
    );

RPC_STATUS

RpcSmSetClientAllocFree (
     RPC_CLIENT_ALLOC * ClientAlloc,
     RPC_CLIENT_FREE  * ClientFree
    );

RPC_STATUS

RpcSmSetThreadHandle (
     RPC_SS_THREAD_HANDLE Id
    );

RPC_STATUS

RpcSmSwapClientAllocFree (
     RPC_CLIENT_ALLOC     *   ClientAlloc,
     RPC_CLIENT_FREE      *   ClientFree,
     RPC_CLIENT_ALLOC    * * OldClientAlloc,
     RPC_CLIENT_FREE     * * OldClientFree
    );

void

NdrRpcSsEnableAllocate(
    PMIDL_STUB_MESSAGE      pMessage );

void

NdrRpcSsDisableAllocate(
    PMIDL_STUB_MESSAGE      pMessage );

void

NdrRpcSmSetClientToOsf(
    PMIDL_STUB_MESSAGE      pMessage );

void  *

NdrRpcSmClientAllocate (
     size_t Size
    );

void

NdrRpcSmClientFree (
     void  * NodeToFree
    );

void  *

NdrRpcSsDefaultAllocate (
     size_t Size
    );

void

NdrRpcSsDefaultFree (
     void  * NodeToFree
    );

PFULL_PTR_XLAT_TABLES

NdrFullPointerXlatInit(
    unsigned long           NumberOfPointers,
    XLAT_SIDE               XlatSide
    );

void

NdrFullPointerXlatFree(
    PFULL_PTR_XLAT_TABLES   pXlatTables
    );

void  *

NdrAllocate(
    PMIDL_STUB_MESSAGE      pStubMsg,
    size_t                  Len
    );

void

NdrClearOutParameters(
    PMIDL_STUB_MESSAGE      pStubMsg,
    PFORMAT_STRING          pFormat,
    void  *                 ArgAddr
    );

void  *

NdrOleAllocate (
     size_t Size
    );

void

NdrOleFree (
     void  * NodeToFree
    );
typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
    void *                      Buffer;
    unsigned long               BufferSize;
    void *( * pfnAllocate)(size_t);
    void ( * pfnFree)(void *);
    struct IRpcChannelBuffer *  pRpcChannelBuffer;
    ULONG_PTR                   Reserved[5];
} NDR_USER_MARSHAL_INFO_LEVEL1;
typedef struct _NDR_USER_MARSHAL_INFO
{
    unsigned long InformationLevel;
    union {
        NDR_USER_MARSHAL_INFO_LEVEL1 Level1;
    };
} NDR_USER_MARSHAL_INFO;
RPC_STATUS

NdrGetUserMarshalInfo (
     unsigned long        *   pFlags,
     unsigned long            InformationLevel,
     NDR_USER_MARSHAL_INFO * pMarshalInfo
    );
RPC_STATUS
NdrCreateServerInterfaceFromStub(
             struct IRpcStubBuffer* pStub,
              RPC_SERVER_INTERFACE *pServerIf );
CLIENT_CALL_RETURN __cdecl
NdrClientCall3(
    MIDL_STUBLESS_PROXY_INFO   *pProxyInfo,
    unsigned long               nProcNum,
    void *                      pReturnValue,
    ...
    );
CLIENT_CALL_RETURN __cdecl
Ndr64AsyncClientCall(
    MIDL_STUBLESS_PROXY_INFO   *pProxyInfo,
    unsigned long               nProcNum,
    void *                      pReturnValue,
    ...
    );
CLIENT_CALL_RETURN __cdecl
Ndr64DcomAsyncClientCall(
    MIDL_STUBLESS_PROXY_INFO   *pProxyInfo,
    unsigned long               nProcNum,
    void *                      pReturnValue,
    ...
    );
struct IRpcStubBuffer;

void

Ndr64AsyncServerCall(
    PRPC_MESSAGE                pRpcMsg
    );

void

Ndr64AsyncServerCall64(
    PRPC_MESSAGE                pRpcMsg
    );

void

Ndr64AsyncServerCallAll(
    PRPC_MESSAGE                pRpcMsg
    );

long

Ndr64AsyncStubCall(
    struct IRpcStubBuffer *     pThis,
    struct IRpcChannelBuffer *  pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long *             pdwStubPhase
    );

long

Ndr64DcomAsyncStubCall(
    struct IRpcStubBuffer    *  pThis,
    struct IRpcChannelBuffer *  pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long            *  pdwStubPhase
    );

long

NdrStubCall3 (
    struct IRpcStubBuffer  *    pThis,
    struct IRpcChannelBuffer  * pChannel,
    PRPC_MESSAGE                pRpcMsg,
    unsigned long  *            pdwStubPhase
    );

void

NdrServerCallAll(
    PRPC_MESSAGE                pRpcMsg
    );

void

NdrServerCallNdr64(
    PRPC_MESSAGE                pRpcMsg
    );

void

NdrServerCall3(
    PRPC_MESSAGE                pRpcMsg
    );

void

NdrPartialIgnoreClientMarshall(
    PMIDL_STUB_MESSAGE          pStubMsg,
    void *                      pMemory
    );

void

NdrPartialIgnoreServerUnmarshall(
    PMIDL_STUB_MESSAGE          pStubMsg,
    void **                     ppMemory
    );

void

NdrPartialIgnoreClientBufferSize(
    PMIDL_STUB_MESSAGE          pStubMsg,
    void *                      pMemory
    );

void

NdrPartialIgnoreServerInitialize(
    PMIDL_STUB_MESSAGE          pStubMsg,
    void **                     ppMemory,
    PFORMAT_STRING              pFormat
    );
void
RpcUserFree( handle_t AsyncHandle, void * pBuffer );
extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_s_ifspec;
typedef struct tagRemHGLOBAL
    {
    long fNullHGlobal;
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHGLOBAL;
typedef struct tagRemHMETAFILEPICT
    {
    long mm;
    long xExt;
    long yExt;
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHMETAFILEPICT;
typedef struct tagRemHENHMETAFILE
    {
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHENHMETAFILE;
typedef struct tagRemHBITMAP
    {
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHBITMAP;
typedef struct tagRemHPALETTE
    {
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHPALETTE;
typedef struct tagRemBRUSH
    {
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemHBRUSH;
typedef WCHAR OLECHAR;
typedef    OLECHAR *LPOLESTR;
typedef    const OLECHAR *LPCOLESTR;
typedef unsigned char UCHAR;
typedef short SHORT;
typedef unsigned short USHORT;
typedef DWORD ULONG;
typedef double DOUBLE;
typedef struct _COAUTHIDENTITY
    {
    USHORT *User;
    ULONG UserLength;
    USHORT *Domain;
    ULONG DomainLength;
    USHORT *Password;
    ULONG PasswordLength;
    ULONG Flags;
    } 	COAUTHIDENTITY;
typedef struct _COAUTHINFO
    {
    DWORD dwAuthnSvc;
    DWORD dwAuthzSvc;
    LPWSTR pwszServerPrincName;
    DWORD dwAuthnLevel;
    DWORD dwImpersonationLevel;
    COAUTHIDENTITY *pAuthIdentityData;
    DWORD dwCapabilities;
    } 	COAUTHINFO;
typedef LONG SCODE;
typedef SCODE *PSCODE;
typedef
enum tagMEMCTX
    {	MEMCTX_TASK	= 1,
	MEMCTX_SHARED	= 2,
	MEMCTX_MACSYSTEM	= 3,
	MEMCTX_UNKNOWN	= -1,
	MEMCTX_SAME	= -2
    } 	MEMCTX;
typedef
enum tagCLSCTX
    {	CLSCTX_INPROC_SERVER	= 0x1,
	CLSCTX_INPROC_HANDLER	= 0x2,
	CLSCTX_LOCAL_SERVER	= 0x4,
	CLSCTX_INPROC_SERVER16	= 0x8,
	CLSCTX_REMOTE_SERVER	= 0x10,
	CLSCTX_INPROC_HANDLER16	= 0x20,
	CLSCTX_RESERVED1	= 0x40,
	CLSCTX_RESERVED2	= 0x80,
	CLSCTX_RESERVED3	= 0x100,
	CLSCTX_RESERVED4	= 0x200,
	CLSCTX_NO_CODE_DOWNLOAD	= 0x400,
	CLSCTX_RESERVED5	= 0x800,
	CLSCTX_NO_CUSTOM_MARSHAL	= 0x1000,
	CLSCTX_ENABLE_CODE_DOWNLOAD	= 0x2000,
	CLSCTX_NO_FAILURE_LOG	= 0x4000,
	CLSCTX_DISABLE_AAA	= 0x8000,
	CLSCTX_ENABLE_AAA	= 0x10000,
	CLSCTX_FROM_DEFAULT_CONTEXT	= 0x20000,
	CLSCTX_ACTIVATE_32_BIT_SERVER	= 0x40000,
	CLSCTX_ACTIVATE_64_BIT_SERVER	= 0x80000,
	CLSCTX_ENABLE_CLOAKING	= 0x100000,
	CLSCTX_PS_DLL	= 0x80000000
    } 	CLSCTX;
typedef
enum tagMSHLFLAGS
    {	MSHLFLAGS_NORMAL	= 0,
	MSHLFLAGS_TABLESTRONG	= 1,
	MSHLFLAGS_TABLEWEAK	= 2,
	MSHLFLAGS_NOPING	= 4,
	MSHLFLAGS_RESERVED1	= 8,
	MSHLFLAGS_RESERVED2	= 16,
	MSHLFLAGS_RESERVED3	= 32,
	MSHLFLAGS_RESERVED4	= 64
    } 	MSHLFLAGS;
typedef
enum tagMSHCTX
    {	MSHCTX_LOCAL	= 0,
	MSHCTX_NOSHAREDMEM	= 1,
	MSHCTX_DIFFERENTMACHINE	= 2,
	MSHCTX_INPROC	= 3,
	MSHCTX_CROSSCTX	= 4
    } 	MSHCTX;
typedef
enum tagDVASPECT
    {	DVASPECT_CONTENT	= 1,
	DVASPECT_THUMBNAIL	= 2,
	DVASPECT_ICON	= 4,
	DVASPECT_DOCPRINT	= 8
    } 	DVASPECT;
typedef
enum tagSTGC
    {	STGC_DEFAULT	= 0,
	STGC_OVERWRITE	= 1,
	STGC_ONLYIFCURRENT	= 2,
	STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE	= 4,
	STGC_CONSOLIDATE	= 8
    } 	STGC;
typedef
enum tagSTGMOVE
    {	STGMOVE_MOVE	= 0,
	STGMOVE_COPY	= 1,
	STGMOVE_SHALLOWCOPY	= 2
    } 	STGMOVE;
typedef
enum tagSTATFLAG
    {	STATFLAG_DEFAULT	= 0,
	STATFLAG_NONAME	= 1,
	STATFLAG_NOOPEN	= 2
    } 	STATFLAG;
typedef  void *HCONTEXT;
typedef DWORD LCID;
typedef USHORT LANGID;
typedef struct _BYTE_BLOB
    {
    unsigned long clSize;
    byte abData[ 1 ];
    } 	BYTE_BLOB;
typedef    BYTE_BLOB *UP_BYTE_BLOB;
typedef struct _WORD_BLOB
    {
    unsigned long clSize;
    unsigned short asData[ 1 ];
    } 	WORD_BLOB;
typedef    WORD_BLOB *UP_WORD_BLOB;
typedef struct _DWORD_BLOB
    {
    unsigned long clSize;
    unsigned long alData[ 1 ];
    } 	DWORD_BLOB;
typedef    DWORD_BLOB *UP_DWORD_BLOB;
typedef struct _FLAGGED_BYTE_BLOB
    {
    unsigned long fFlags;
    unsigned long clSize;
    byte abData[ 1 ];
    } 	FLAGGED_BYTE_BLOB;
typedef    FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
typedef struct _FLAGGED_WORD_BLOB
    {
    unsigned long fFlags;
    unsigned long clSize;
    unsigned short asData[ 1 ];
    } 	FLAGGED_WORD_BLOB;
typedef    FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
typedef struct _BYTE_SIZEDARR
    {
    unsigned long clSize;
    byte *pData;
    } 	BYTE_SIZEDARR;
typedef struct _SHORT_SIZEDARR
    {
    unsigned long clSize;
    unsigned short *pData;
    } 	WORD_SIZEDARR;
typedef struct _LONG_SIZEDARR
    {
    unsigned long clSize;
    unsigned long *pData;
    } 	DWORD_SIZEDARR;
typedef struct _HYPER_SIZEDARR
    {
    unsigned long clSize;
    __int64 *pData;
    } 	HYPER_SIZEDARR;
typedef struct _userCLIPFORMAT
    {
    long fContext;
     union __MIDL_IWinTypes_0001
        {
        DWORD dwValue;
        wchar_t *pwszName;
        } 	u;
    } 	userCLIPFORMAT;
typedef    userCLIPFORMAT *wireCLIPFORMAT;
typedef  WORD CLIPFORMAT;
typedef struct _GDI_NONREMOTE
    {
    long fContext;
     union __MIDL_IWinTypes_0002
        {
        long hInproc;
        DWORD_BLOB *hRemote;
        } 	u;
    } 	GDI_NONREMOTE;
typedef struct _userHGLOBAL
    {
    long fContext;
     union __MIDL_IWinTypes_0003
        {
        long hInproc;
        FLAGGED_BYTE_BLOB *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHGLOBAL;
typedef    userHGLOBAL *wireHGLOBAL;
typedef struct _userHMETAFILE
    {
    long fContext;
     union __MIDL_IWinTypes_0004
        {
        long hInproc;
        BYTE_BLOB *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHMETAFILE;
typedef struct _remoteMETAFILEPICT
    {
    long mm;
    long xExt;
    long yExt;
    userHMETAFILE *hMF;
    } 	remoteMETAFILEPICT;
typedef struct _userHMETAFILEPICT
    {
    long fContext;
     union __MIDL_IWinTypes_0005
        {
        long hInproc;
        remoteMETAFILEPICT *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHMETAFILEPICT;
typedef struct _userHENHMETAFILE
    {
    long fContext;
     union __MIDL_IWinTypes_0006
        {
        long hInproc;
        BYTE_BLOB *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHENHMETAFILE;
typedef struct _userBITMAP
    {
    LONG bmType;
    LONG bmWidth;
    LONG bmHeight;
    LONG bmWidthBytes;
    WORD bmPlanes;
    WORD bmBitsPixel;
    ULONG cbSize;
    byte pBuffer[ 1 ];
    } 	userBITMAP;
typedef struct _userHBITMAP
    {
    long fContext;
     union __MIDL_IWinTypes_0007
        {
        long hInproc;
        userBITMAP *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHBITMAP;
typedef struct _userHPALETTE
    {
    long fContext;
     union __MIDL_IWinTypes_0008
        {
        long hInproc;
        LOGPALETTE *hRemote;
        __int64 hInproc64;
        } 	u;
    } 	userHPALETTE;
typedef struct _RemotableHandle
    {
    long fContext;
     union __MIDL_IWinTypes_0009
        {
        long hInproc;
        long hRemote;
        } 	u;
    } 	RemotableHandle;
typedef    RemotableHandle *wireHWND;
typedef    RemotableHandle *wireHMENU;
typedef    RemotableHandle *wireHACCEL;
typedef    RemotableHandle *wireHBRUSH;
typedef    RemotableHandle *wireHFONT;
typedef    RemotableHandle *wireHDC;
typedef    RemotableHandle *wireHICON;
typedef    RemotableHandle *wireHRGN;
typedef    userHBITMAP *wireHBITMAP;
typedef    userHPALETTE *wireHPALETTE;
typedef    userHENHMETAFILE *wireHENHMETAFILE;
typedef    userHMETAFILE *wireHMETAFILE;
typedef    userHMETAFILEPICT *wireHMETAFILEPICT;
typedef  void *HMETAFILEPICT;
extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec;
extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec;
typedef double DATE;
typedef union tagCY {
    struct {
        unsigned long Lo;
        long      Hi;
    };
    LONGLONG int64;
} CY;
typedef CY *LPCY;
typedef struct tagDEC {
    USHORT wReserved;
    union {
        struct {
            BYTE scale;
            BYTE sign;
        };
        USHORT signscale;
    };
    ULONG Hi32;
    union {
        struct {
            ULONG Lo32;
            ULONG Mid32;
        };
        ULONGLONG Lo64;
    };
} DECIMAL;
typedef DECIMAL *LPDECIMAL;
typedef    FLAGGED_WORD_BLOB *wireBSTR;
typedef  OLECHAR *BSTR;
typedef BSTR *LPBSTR;
typedef short VARIANT_BOOL;
typedef boolean BOOLEAN;
typedef struct tagBSTRBLOB
    {
    ULONG cbSize;
    BYTE *pData;
    } 	BSTRBLOB;
typedef struct tagBSTRBLOB *LPBSTRBLOB;
typedef struct tagBLOB
    {
    ULONG cbSize;
    BYTE *pBlobData;
    } 	BLOB;
typedef struct tagBLOB *LPBLOB;
typedef struct tagCLIPDATA
    {
    ULONG cbSize;
    long ulClipFmt;
    BYTE *pClipData;
    } 	CLIPDATA;
typedef unsigned short VARTYPE;
enum VARENUM
    {	VT_EMPTY	= 0,
	VT_NULL	= 1,
	VT_I2	= 2,
	VT_I4	= 3,
	VT_R4	= 4,
	VT_R8	= 5,
	VT_CY	= 6,
	VT_DATE	= 7,
	VT_BSTR	= 8,
	VT_DISPATCH	= 9,
	VT_ERROR	= 10,
	VT_BOOL	= 11,
	VT_VARIANT	= 12,
	VT_UNKNOWN	= 13,
	VT_DECIMAL	= 14,
	VT_I1	= 16,
	VT_UI1	= 17,
	VT_UI2	= 18,
	VT_UI4	= 19,
	VT_I8	= 20,
	VT_UI8	= 21,
	VT_INT	= 22,
	VT_UINT	= 23,
	VT_VOID	= 24,
	VT_HRESULT	= 25,
	VT_PTR	= 26,
	VT_SAFEARRAY	= 27,
	VT_CARRAY	= 28,
	VT_USERDEFINED	= 29,
	VT_LPSTR	= 30,
	VT_LPWSTR	= 31,
	VT_RECORD	= 36,
	VT_INT_PTR	= 37,
	VT_UINT_PTR	= 38,
	VT_FILETIME	= 64,
	VT_BLOB	= 65,
	VT_STREAM	= 66,
	VT_STORAGE	= 67,
	VT_STREAMED_OBJECT	= 68,
	VT_STORED_OBJECT	= 69,
	VT_BLOB_OBJECT	= 70,
	VT_CF	= 71,
	VT_CLSID	= 72,
	VT_VERSIONED_STREAM	= 73,
	VT_BSTR_BLOB	= 0xfff,
	VT_VECTOR	= 0x1000,
	VT_ARRAY	= 0x2000,
	VT_BYREF	= 0x4000,
	VT_RESERVED	= 0x8000,
	VT_ILLEGAL	= 0xffff,
	VT_ILLEGALMASKED	= 0xfff,
	VT_TYPEMASK	= 0xfff
    } ;
typedef ULONG PROPID;
typedef struct _tagpropertykey
    {
    GUID fmtid;
    DWORD pid;
    } 	PROPERTYKEY;
typedef struct tagCSPLATFORM
    {
    DWORD dwPlatformId;
    DWORD dwVersionHi;
    DWORD dwVersionLo;
    DWORD dwProcessorArch;
    } 	CSPLATFORM;
typedef struct tagQUERYCONTEXT
    {
    DWORD dwContext;
    CSPLATFORM Platform;
    LCID Locale;
    DWORD dwVersionHi;
    DWORD dwVersionLo;
    } 	QUERYCONTEXT;
typedef
enum tagTYSPEC
    {	TYSPEC_CLSID	= 0,
	TYSPEC_FILEEXT	= ( TYSPEC_CLSID + 1 ) ,
	TYSPEC_MIMETYPE	= ( TYSPEC_FILEEXT + 1 ) ,
	TYSPEC_FILENAME	= ( TYSPEC_MIMETYPE + 1 ) ,
	TYSPEC_PROGID	= ( TYSPEC_FILENAME + 1 ) ,
	TYSPEC_PACKAGENAME	= ( TYSPEC_PROGID + 1 ) ,
	TYSPEC_OBJECTID	= ( TYSPEC_PACKAGENAME + 1 )
    } 	TYSPEC;
typedef  struct __MIDL___MIDL_itf_wtypes_0000_0001_0001
    {
    DWORD tyspec;
     union __MIDL___MIDL_itf_wtypes_0000_0001_0005
        {
        CLSID clsid;
        LPOLESTR pFileExt;
        LPOLESTR pMimeType;
        LPOLESTR pProgId;
        LPOLESTR pFileName;
        struct
            {
            LPOLESTR pPackageName;
            GUID PolicyId;
            } 	ByName;
        struct
            {
            GUID ObjectId;
            GUID PolicyId;
            } 	ByObjectId;
        } 	tagged_union;
    } 	uCLSSPEC;
extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_s_ifspec;
extern const GUID  GUID_DEVINTERFACE_DISK;
extern const GUID  GUID_DEVINTERFACE_CDROM;
extern const GUID  GUID_DEVINTERFACE_PARTITION;
extern const GUID  GUID_DEVINTERFACE_TAPE;
extern const GUID  GUID_DEVINTERFACE_WRITEONCEDISK;
extern const GUID  GUID_DEVINTERFACE_VOLUME;
extern const GUID  GUID_DEVINTERFACE_MEDIUMCHANGER;
extern const GUID  GUID_DEVINTERFACE_FLOPPY;
extern const GUID  GUID_DEVINTERFACE_CDCHANGER;
extern const GUID  GUID_DEVINTERFACE_STORAGEPORT;
extern const GUID  GUID_DEVINTERFACE_COMPORT;
extern const GUID  GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR;
typedef struct _STORAGE_HOTPLUG_INFO {
    DWORD Size;
    BOOLEAN MediaRemovable;
    BOOLEAN MediaHotplug;
    BOOLEAN DeviceHotplug;
    BOOLEAN WriteCacheEnableOverride;
} STORAGE_HOTPLUG_INFO, *PSTORAGE_HOTPLUG_INFO;
typedef struct _STORAGE_DEVICE_NUMBER {
    DWORD DeviceType;
    DWORD       DeviceNumber;
    DWORD       PartitionNumber;
} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
typedef struct _STORAGE_BUS_RESET_REQUEST {
    BYTE  PathId;
} STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
typedef struct STORAGE_BREAK_RESERVATION_REQUEST {
        DWORD Length;
        BYTE  _unused;
    BYTE  PathId;
    BYTE  TargetId;
    BYTE  Lun;
} STORAGE_BREAK_RESERVATION_REQUEST, *PSTORAGE_BREAK_RESERVATION_REQUEST;
typedef struct _PREVENT_MEDIA_REMOVAL {
    BOOLEAN PreventMediaRemoval;
} PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
typedef struct _CLASS_MEDIA_CHANGE_CONTEXT {
        DWORD MediaChangeCount;
        DWORD NewState;
} CLASS_MEDIA_CHANGE_CONTEXT, *PCLASS_MEDIA_CHANGE_CONTEXT;
typedef struct _TAPE_STATISTICS {
    DWORD Version;
    DWORD Flags;
    LARGE_INTEGER RecoveredWrites;
    LARGE_INTEGER UnrecoveredWrites;
    LARGE_INTEGER RecoveredReads;
    LARGE_INTEGER UnrecoveredReads;
    BYTE          CompressionRatioReads;
    BYTE          CompressionRatioWrites;
} TAPE_STATISTICS, *PTAPE_STATISTICS;
typedef struct _TAPE_GET_STATISTICS {
    DWORD Operation;
} TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;
typedef enum _STORAGE_MEDIA_TYPE {
    DDS_4mm = 0x20,
    MiniQic,
    Travan,
    QIC,
    MP_8mm,
    AME_8mm,
    AIT1_8mm,
    DLT,
    NCTP,
    IBM_3480,
    IBM_3490E,
    IBM_Magstar_3590,
    IBM_Magstar_MP,
    STK_DATA_D3,
    SONY_DTF,
    DV_6mm,
    DMI,
    SONY_D2,
    CLEANER_CARTRIDGE,
    CD_ROM,
    CD_R,
    CD_RW,
    DVD_ROM,
    DVD_R,
    DVD_RW,
    MO_3_RW,
    MO_5_WO,
    MO_5_RW,
    MO_5_LIMDOW,
    PC_5_WO,
    PC_5_RW,
    PD_5_RW,
    ABL_5_WO,
    PINNACLE_APEX_5_RW,
    SONY_12_WO,
    PHILIPS_12_WO,
    HITACHI_12_WO,
    CYGNET_12_WO,
    KODAK_14_WO,
    MO_NFR_525,
    NIKON_12_RW,
    IOMEGA_ZIP,
    IOMEGA_JAZ,
    SYQUEST_EZ135,
    SYQUEST_EZFLYER,
    SYQUEST_SYJET,
    AVATAR_F2,
    MP2_8mm,
    DST_S,
    DST_M,
    DST_L,
    VXATape_1,
    VXATape_2,
    STK_9840,
    LTO_Ultrium,
    LTO_Accelis,
    DVD_RAM,
    AIT_8mm,
    ADR_1,
    ADR_2,
    STK_9940,
    SAIT
}STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
typedef enum _STORAGE_BUS_TYPE {
    BusTypeUnknown = 0x00,
    BusTypeScsi,
    BusTypeAtapi,
    BusTypeAta,
    BusType1394,
    BusTypeSsa,
    BusTypeFibre,
    BusTypeUsb,
    BusTypeRAID,
    BusTypeiScsi,
    BusTypeSas,
    BusTypeSata,
    BusTypeSd,
    BusTypeMmc,
    BusTypeMax,
    BusTypeMaxReserved = 0x7F
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
typedef struct _DEVICE_MEDIA_INFO {
    union {
        struct {
            LARGE_INTEGER Cylinders;
            STORAGE_MEDIA_TYPE MediaType;
            DWORD TracksPerCylinder;
            DWORD SectorsPerTrack;
            DWORD BytesPerSector;
            DWORD NumberMediaSides;
            DWORD MediaCharacteristics;
        } DiskInfo;
        struct {
            LARGE_INTEGER Cylinders;
            STORAGE_MEDIA_TYPE MediaType;
            DWORD TracksPerCylinder;
            DWORD SectorsPerTrack;
            DWORD BytesPerSector;
            DWORD NumberMediaSides;
            DWORD MediaCharacteristics;
        } RemovableDiskInfo;
        struct {
            STORAGE_MEDIA_TYPE MediaType;
            DWORD   MediaCharacteristics;
            DWORD   CurrentBlockSize;
            STORAGE_BUS_TYPE BusType;
            union {
                struct {
                    BYTE  MediumType;
                    BYTE  DensityCode;
                } ScsiInformation;
            } BusSpecificData;
        } TapeInfo;
    } DeviceSpecific;
} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
typedef struct _GET_MEDIA_TYPES {
    DWORD DeviceType;
    DWORD MediaInfoCount;
    DEVICE_MEDIA_INFO MediaInfo[1];
} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
typedef struct _STORAGE_PREDICT_FAILURE
{
    DWORD PredictFailure;
    BYTE  VendorSpecific[512];
} STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
typedef enum _STORAGE_QUERY_TYPE {
    PropertyStandardQuery = 0,
    PropertyExistsQuery,
    PropertyMaskQuery,
    PropertyQueryMaxDefined
} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
typedef enum _STORAGE_PROPERTY_ID {
    StorageDeviceProperty = 0,
    StorageAdapterProperty,
    StorageDeviceIdProperty,
    StorageDeviceUniqueIdProperty,
    StorageDeviceWriteCacheProperty,
    StorageMiniportProperty,
    StorageAccessAlignmentProperty
} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
typedef struct _STORAGE_PROPERTY_QUERY {
    STORAGE_PROPERTY_ID PropertyId;
    STORAGE_QUERY_TYPE QueryType;
    BYTE  AdditionalParameters[1];
} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
typedef  struct _STORAGE_DESCRIPTOR_HEADER {
    DWORD Version;
    DWORD Size;
} STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
typedef  struct _STORAGE_DEVICE_DESCRIPTOR {
    DWORD Version;
    DWORD Size;
    BYTE  DeviceType;
    BYTE  DeviceTypeModifier;
    BOOLEAN RemovableMedia;
    BOOLEAN CommandQueueing;
    DWORD VendorIdOffset;
    DWORD ProductIdOffset;
    DWORD ProductRevisionOffset;
    DWORD SerialNumberOffset;
    STORAGE_BUS_TYPE BusType;
    DWORD RawPropertiesLength;
    BYTE  RawDeviceProperties[1];
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
typedef  struct _STORAGE_ADAPTER_DESCRIPTOR {
    DWORD Version;
    DWORD Size;
    DWORD MaximumTransferLength;
    DWORD MaximumPhysicalPages;
    DWORD AlignmentMask;
    BOOLEAN AdapterUsesPio;
    BOOLEAN AdapterScansDown;
    BOOLEAN CommandQueueing;
    BOOLEAN AcceleratedTransfer;
    BYTE  BusType;
    WORD   BusMajorVersion;
    WORD   BusMinorVersion;
} STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
typedef  struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR {
    DWORD Version;
    DWORD Size;
    DWORD BytesPerCacheLine;
    DWORD BytesOffsetForCacheAlignment;
    DWORD BytesPerLogicalSector;
    DWORD BytesPerPhysicalSector;
    DWORD BytesOffsetForSectorAlignment;
} STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
typedef enum _STORAGE_PORT_CODE_SET {
    StoragePortCodeSetReserved = 0,
    StoragePortCodeSetStorport = 1,
    StoragePortCodeSetSCSIport = 2
} STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET;
typedef struct _STORAGE_MINIPORT_DESCRIPTOR {
    DWORD Version;
    DWORD Size;
    STORAGE_PORT_CODE_SET Portdriver;
    BOOLEAN LUNResetSupported;
    BOOLEAN TargetResetSupported;
} STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR;
typedef enum _STORAGE_IDENTIFIER_CODE_SET {
    StorageIdCodeSetReserved = 0,
    StorageIdCodeSetBinary = 1,
    StorageIdCodeSetAscii = 2,
    StorageIdCodeSetUtf8 = 3
} STORAGE_IDENTIFIER_CODE_SET, *PSTORAGE_IDENTIFIER_CODE_SET;
typedef enum _STORAGE_IDENTIFIER_TYPE {
    StorageIdTypeVendorSpecific = 0,
    StorageIdTypeVendorId = 1,
    StorageIdTypeEUI64 = 2,
    StorageIdTypeFCPHName = 3,
    StorageIdTypePortRelative = 4,
    StorageIdTypeTargetPortGroup = 5,
    StorageIdTypeLogicalUnitGroup = 6,
    StorageIdTypeMD5LogicalUnitIdentifier = 7,
    StorageIdTypeScsiNameString = 8
} STORAGE_IDENTIFIER_TYPE, *PSTORAGE_IDENTIFIER_TYPE;
typedef enum _STORAGE_ID_NAA_FORMAT {
        StorageIdNAAFormatIEEEExtended = 2,
        StorageIdNAAFormatIEEERegistered = 3,
        StorageIdNAAFormatIEEEERegisteredExtended = 5
} STORAGE_ID_NAA_FORMAT, *PSTORAGE_ID_NAA_FORMAT;
typedef enum _STORAGE_ASSOCIATION_TYPE {
    StorageIdAssocDevice = 0,
    StorageIdAssocPort = 1,
    StorageIdAssocTarget = 2
} STORAGE_ASSOCIATION_TYPE, *PSTORAGE_ASSOCIATION_TYPE;
typedef struct _STORAGE_IDENTIFIER {
    STORAGE_IDENTIFIER_CODE_SET CodeSet;
    STORAGE_IDENTIFIER_TYPE Type;
    WORD   IdentifierSize;
    WORD   NextOffset;
    STORAGE_ASSOCIATION_TYPE Association;
    BYTE  Identifier[1];
} STORAGE_IDENTIFIER, *PSTORAGE_IDENTIFIER;
typedef  struct _STORAGE_DEVICE_ID_DESCRIPTOR {
    DWORD Version;
    DWORD Size;
    DWORD NumberOfIdentifiers;
    BYTE  Identifiers[1];
} STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT {
    DWORD MaximumRequestsPerPeriod;
    DWORD MinimumPeriod;
    DWORDLONG MaximumRequestSize;
    DWORD EstimatedTimePerRequest;
    DWORD NumOutStandingRequests;
    DWORDLONG RequestSize;
} STORAGE_GET_BC_PROPERTIES_OUTPUT, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT;
typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT {
    DWORD Version;
    DWORD RequestsPerPeriod;
    DWORD Period;
    BOOLEAN RetryFailures;
    BOOLEAN Discardable;
    BOOLEAN Reserved1[2];
    DWORD AccessType;
    DWORD AccessMode;
} STORAGE_ALLOCATE_BC_STREAM_INPUT, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT;
typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT {
    DWORDLONG RequestSize;
    DWORD NumOutStandingRequests;
} STORAGE_ALLOCATE_BC_STREAM_OUTPUT, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT;
typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
    DWORD SupportFlags;
} STORAGE_PRIORITY_HINT_SUPPORT, *PSTORAGE_PRIORITY_HINT_SUPPORT;
typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
    WORD   Reserved;
    WORD   SerialNumberLength;
    BYTE  SerialNumber[0];
} STORAGE_MEDIA_SERIAL_NUMBER_DATA, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA;
typedef  struct _STORAGE_READ_CAPACITY {
    DWORD Version;
    DWORD Size;
    DWORD BlockLength;
    LARGE_INTEGER NumberOfBlocks;
    LARGE_INTEGER DiskLength;
} STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY;
typedef enum _WRITE_CACHE_TYPE {
    WriteCacheTypeUnknown,
    WriteCacheTypeNone,
    WriteCacheTypeWriteBack,
    WriteCacheTypeWriteThrough
} WRITE_CACHE_TYPE;
typedef enum _WRITE_CACHE_ENABLE {
    WriteCacheEnableUnknown,
    WriteCacheDisabled,
    WriteCacheEnabled
} WRITE_CACHE_ENABLE;
typedef enum _WRITE_CACHE_CHANGE {
    WriteCacheChangeUnknown,
    WriteCacheNotChangeable,
    WriteCacheChangeable
} WRITE_CACHE_CHANGE;
typedef enum _WRITE_THROUGH {
    WriteThroughUnknown,
    WriteThroughNotSupported,
    WriteThroughSupported
} WRITE_THROUGH;
typedef  struct _STORAGE_WRITE_CACHE_PROPERTY {
    DWORD Version;
    DWORD Size;
    WRITE_CACHE_TYPE WriteCacheType;
    WRITE_CACHE_ENABLE WriteCacheEnabled;
    WRITE_CACHE_CHANGE WriteCacheChangeable;
    WRITE_THROUGH WriteThroughSupported;
    BOOLEAN FlushCacheSupported;
    BOOLEAN UserDefinedPowerProtection;
    BOOLEAN NVCacheEnabled;
} STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY;
typedef struct _PERSISTENT_RESERVE_COMMAND {
    DWORD Version;
    DWORD Size;
    union {
        struct {
            BYTE  ServiceAction : 5;
            BYTE  Reserved1 : 3;
            WORD   AllocationLength;
        } PR_IN;
        struct {
            BYTE  ServiceAction : 5;
            BYTE  Reserved1 : 3;
            BYTE  Type : 4;
            BYTE  Scope : 4;
            BYTE  ParameterList[0];
        } PR_OUT;
    };
} PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND;
typedef enum _MEDIA_TYPE {
    Unknown,
    F5_1Pt2_512,
    F3_1Pt44_512,
    F3_2Pt88_512,
    F3_20Pt8_512,
    F3_720_512,
    F5_360_512,
    F5_320_512,
    F5_320_1024,
    F5_180_512,
    F5_160_512,
    RemovableMedia,
    FixedMedia,
    F3_120M_512,
    F3_640_512,
    F5_640_512,
    F5_720_512,
    F3_1Pt2_512,
    F3_1Pt23_1024,
    F5_1Pt23_1024,
    F3_128Mb_512,
    F3_230Mb_512,
    F8_256_128,
    F3_200Mb_512,
    F3_240M_512,
    F3_32M_512
} MEDIA_TYPE, *PMEDIA_TYPE;
typedef struct _FORMAT_PARAMETERS {
   MEDIA_TYPE MediaType;
   DWORD StartCylinderNumber;
   DWORD EndCylinderNumber;
   DWORD StartHeadNumber;
   DWORD EndHeadNumber;
} FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;
typedef WORD   BAD_TRACK_NUMBER;
typedef WORD   *PBAD_TRACK_NUMBER;
typedef struct _FORMAT_EX_PARAMETERS {
   MEDIA_TYPE MediaType;
   DWORD StartCylinderNumber;
   DWORD EndCylinderNumber;
   DWORD StartHeadNumber;
   DWORD EndHeadNumber;
   WORD   FormatGapLength;
   WORD   SectorsPerTrack;
   WORD   SectorNumber[1];
} FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;
typedef struct _DISK_GEOMETRY {
    LARGE_INTEGER Cylinders;
    MEDIA_TYPE MediaType;
    DWORD TracksPerCylinder;
    DWORD SectorsPerTrack;
    DWORD BytesPerSector;
} DISK_GEOMETRY, *PDISK_GEOMETRY;
typedef struct _PARTITION_INFORMATION {
    LARGE_INTEGER StartingOffset;
    LARGE_INTEGER PartitionLength;
    DWORD HiddenSectors;
    DWORD PartitionNumber;
    BYTE  PartitionType;
    BOOLEAN BootIndicator;
    BOOLEAN RecognizedPartition;
    BOOLEAN RewritePartition;
} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
typedef struct _SET_PARTITION_INFORMATION {
    BYTE  PartitionType;
} SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
typedef struct _DRIVE_LAYOUT_INFORMATION {
    DWORD PartitionCount;
    DWORD Signature;
    PARTITION_INFORMATION PartitionEntry[1];
} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
typedef struct _VERIFY_INFORMATION {
    LARGE_INTEGER StartingOffset;
    DWORD Length;
} VERIFY_INFORMATION, *PVERIFY_INFORMATION;
typedef struct _REASSIGN_BLOCKS {
    WORD   Reserved;
    WORD   Count;
    DWORD BlockNumber[1];
} REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;
typedef struct _REASSIGN_BLOCKS_EX {
    WORD   Reserved;
    WORD   Count;
    LARGE_INTEGER BlockNumber[1];
} REASSIGN_BLOCKS_EX, *PREASSIGN_BLOCKS_EX;
typedef enum _PARTITION_STYLE {
    PARTITION_STYLE_MBR,
    PARTITION_STYLE_GPT,
    PARTITION_STYLE_RAW
} PARTITION_STYLE;
typedef struct _PARTITION_INFORMATION_GPT {
    GUID PartitionType;
    GUID PartitionId;
    DWORD64 Attributes;
    WCHAR Name [36];
} PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;
typedef struct _PARTITION_INFORMATION_MBR {
    BYTE  PartitionType;
    BOOLEAN BootIndicator;
    BOOLEAN RecognizedPartition;
    DWORD HiddenSectors;
} PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR;
typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT;
typedef struct _SET_PARTITION_INFORMATION_EX {
    PARTITION_STYLE PartitionStyle;
    union {
        SET_PARTITION_INFORMATION_MBR Mbr;
        SET_PARTITION_INFORMATION_GPT Gpt;
    };
} SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX;
typedef struct _CREATE_DISK_GPT {
    GUID DiskId;
    DWORD MaxPartitionCount;
} CREATE_DISK_GPT, *PCREATE_DISK_GPT;
typedef struct _CREATE_DISK_MBR {
    DWORD Signature;
} CREATE_DISK_MBR, *PCREATE_DISK_MBR;
typedef struct _CREATE_DISK {
    PARTITION_STYLE PartitionStyle;
    union {
        CREATE_DISK_MBR Mbr;
        CREATE_DISK_GPT Gpt;
    };
} CREATE_DISK, *PCREATE_DISK;
typedef struct _GET_LENGTH_INFORMATION {
    LARGE_INTEGER   Length;
} GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
typedef struct _PARTITION_INFORMATION_EX {
    PARTITION_STYLE PartitionStyle;
    LARGE_INTEGER StartingOffset;
    LARGE_INTEGER PartitionLength;
    DWORD PartitionNumber;
    BOOLEAN RewritePartition;
    union {
        PARTITION_INFORMATION_MBR Mbr;
        PARTITION_INFORMATION_GPT Gpt;
    };
} PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX;
typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
    GUID DiskId;
    LARGE_INTEGER StartingUsableOffset;
    LARGE_INTEGER UsableLength;
    DWORD MaxPartitionCount;
} DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
    DWORD Signature;
} DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
    DWORD PartitionStyle;
    DWORD PartitionCount;
    union {
        DRIVE_LAYOUT_INFORMATION_MBR Mbr;
        DRIVE_LAYOUT_INFORMATION_GPT Gpt;
    };
    PARTITION_INFORMATION_EX PartitionEntry[1];
} DRIVE_LAYOUT_INFORMATION_EX, *PDRIVE_LAYOUT_INFORMATION_EX;
typedef enum _DETECTION_TYPE {
        DetectNone,
        DetectInt13,
        DetectExInt13
} DETECTION_TYPE;
typedef struct _DISK_INT13_INFO {
        WORD   DriveSelect;
        DWORD MaxCylinders;
        WORD   SectorsPerTrack;
        WORD   MaxHeads;
        WORD   NumberDrives;
} DISK_INT13_INFO, *PDISK_INT13_INFO;
typedef struct _DISK_EX_INT13_INFO {
        WORD   ExBufferSize;
        WORD   ExFlags;
        DWORD ExCylinders;
        DWORD ExHeads;
        DWORD ExSectorsPerTrack;
        DWORD64 ExSectorsPerDrive;
        WORD   ExSectorSize;
        WORD   ExReserved;
} DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO;
typedef struct _DISK_DETECTION_INFO {
        DWORD SizeOfDetectInfo;
        DETECTION_TYPE DetectionType;
        union {
                struct {
                        DISK_INT13_INFO Int13;
                        DISK_EX_INT13_INFO ExInt13;
                };
        };
} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;
typedef struct _DISK_PARTITION_INFO {
        DWORD SizeOfPartitionInfo;
        PARTITION_STYLE PartitionStyle;
        union {
                struct {
                        DWORD Signature;
                        DWORD CheckSum;
                } Mbr;
                struct {
                        GUID DiskId;
                } Gpt;
        };
} DISK_PARTITION_INFO, *PDISK_PARTITION_INFO;
typedef struct _DISK_GEOMETRY_EX {
        DISK_GEOMETRY Geometry;
        LARGE_INTEGER DiskSize;
        BYTE  Data[1];
} DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;
typedef struct _DISK_CONTROLLER_NUMBER {
    DWORD ControllerNumber;
    DWORD DiskNumber;
} DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
typedef enum {
    EqualPriority,
    KeepPrefetchedData,
    KeepReadData
} DISK_CACHE_RETENTION_PRIORITY;
typedef struct _DISK_CACHE_INFORMATION {
    BOOLEAN ParametersSavable;
    BOOLEAN ReadCacheEnabled;
    BOOLEAN WriteCacheEnabled;
    DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
    DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
    WORD   DisablePrefetchTransferLength;
    BOOLEAN PrefetchScalar;
    union {
        struct {
            WORD   Minimum;
            WORD   Maximum;
            WORD   MaximumBlocks;
        } ScalarPrefetch;
        struct {
            WORD   Minimum;
            WORD   Maximum;
        } BlockPrefetch;
    };
} DISK_CACHE_INFORMATION, *PDISK_CACHE_INFORMATION;
typedef struct _DISK_GROW_PARTITION {
    DWORD PartitionNumber;
    LARGE_INTEGER BytesToGrow;
} DISK_GROW_PARTITION, *PDISK_GROW_PARTITION;
typedef struct _HISTOGRAM_BUCKET {
    DWORD       Reads;
    DWORD       Writes;
} HISTOGRAM_BUCKET, *PHISTOGRAM_BUCKET;
typedef struct _DISK_HISTOGRAM {
    LARGE_INTEGER   DiskSize;
    LARGE_INTEGER   Start;
    LARGE_INTEGER   End;
    LARGE_INTEGER   Average;
    LARGE_INTEGER   AverageRead;
    LARGE_INTEGER   AverageWrite;
    DWORD           Granularity;
    DWORD           Size;
    DWORD           ReadCount;
    DWORD           WriteCount;
    PHISTOGRAM_BUCKET  Histogram;
} DISK_HISTOGRAM, *PDISK_HISTOGRAM;
typedef struct _DISK_PERFORMANCE {
        LARGE_INTEGER BytesRead;
        LARGE_INTEGER BytesWritten;
        LARGE_INTEGER ReadTime;
        LARGE_INTEGER WriteTime;
        LARGE_INTEGER IdleTime;
        DWORD ReadCount;
        DWORD WriteCount;
        DWORD QueueDepth;
        DWORD SplitCount;
        LARGE_INTEGER QueryTime;
        DWORD   StorageDeviceNumber;
        WCHAR   StorageManagerName[8];
} DISK_PERFORMANCE, *PDISK_PERFORMANCE;
typedef struct _DISK_RECORD {
   LARGE_INTEGER ByteOffset;
   LARGE_INTEGER StartTime;
   LARGE_INTEGER EndTime;
   PVOID VirtualAddress;
   DWORD NumberOfBytes;
   BYTE  DeviceNumber;
   BOOLEAN ReadRequest;
} DISK_RECORD, *PDISK_RECORD;
typedef struct _DISK_LOGGING {
    BYTE  Function;
    PVOID BufferAddress;
    DWORD BufferSize;
} DISK_LOGGING, *PDISK_LOGGING;
typedef enum _BIN_TYPES {
    RequestSize,
    RequestLocation
} BIN_TYPES;
typedef struct _BIN_RANGE {
    LARGE_INTEGER StartValue;
    LARGE_INTEGER Length;
} BIN_RANGE, *PBIN_RANGE;
typedef struct _PERF_BIN {
    DWORD NumberOfBins;
    DWORD TypeOfBin;
    BIN_RANGE BinsRanges[1];
} PERF_BIN, *PPERF_BIN ;
typedef struct _BIN_COUNT {
    BIN_RANGE BinRange;
    DWORD BinCount;
} BIN_COUNT, *PBIN_COUNT;
typedef struct _BIN_RESULTS {
    DWORD NumberOfBins;
    BIN_COUNT BinCounts[1];
} BIN_RESULTS, *PBIN_RESULTS;
typedef struct _GETVERSIONINPARAMS {
        BYTE     bVersion;
        BYTE     bRevision;
        BYTE     bReserved;
        BYTE     bIDEDeviceMap;
        DWORD   fCapabilities;
        DWORD   dwReserved[4];
} GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS;
typedef struct _IDEREGS {
        BYTE     bFeaturesReg;
        BYTE     bSectorCountReg;
        BYTE     bSectorNumberReg;
        BYTE     bCylLowReg;
        BYTE     bCylHighReg;
        BYTE     bDriveHeadReg;
        BYTE     bCommandReg;
        BYTE     bReserved;
} IDEREGS, *PIDEREGS, *LPIDEREGS;
typedef struct _SENDCMDINPARAMS {
        DWORD   cBufferSize;
        IDEREGS irDriveRegs;
        BYTE     bDriveNumber;
        BYTE     bReserved[3];
        DWORD   dwReserved[4];
        BYTE     bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
typedef struct _DRIVERSTATUS {
        BYTE     bDriverError;
        BYTE     bIDEError;
        BYTE     bReserved[2];
        DWORD   dwReserved[2];
} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
typedef struct _SENDCMDOUTPARAMS {
        DWORD                   cBufferSize;
        DRIVERSTATUS            DriverStatus;
        BYTE                    bBuffer[1];
} SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
typedef  enum _ELEMENT_TYPE {
    AllElements,
    ChangerTransport,
    ChangerSlot,
    ChangerIEPort,
    ChangerDrive,
    ChangerDoor,
    ChangerKeypad,
    ChangerMaxElement
} ELEMENT_TYPE, *PELEMENT_TYPE;
typedef  struct _CHANGER_ELEMENT {
    ELEMENT_TYPE    ElementType;
    DWORD   ElementAddress;
} CHANGER_ELEMENT, *PCHANGER_ELEMENT;
typedef  struct _CHANGER_ELEMENT_LIST {
    CHANGER_ELEMENT Element;
    DWORD   NumberOfElements;
} CHANGER_ELEMENT_LIST , *PCHANGER_ELEMENT_LIST;

typedef  struct _GET_CHANGER_PARAMETERS {
    DWORD Size;
    WORD   NumberTransportElements;
    WORD   NumberStorageElements;
    WORD   NumberCleanerSlots;
    WORD   NumberIEElements;
    WORD   NumberDataTransferElements;
    WORD   NumberOfDoors;
    WORD   FirstSlotNumber;
    WORD   FirstDriveNumber;
    WORD   FirstTransportNumber;
    WORD   FirstIEPortNumber;
    WORD   FirstCleanerSlotAddress;
    WORD   MagazineSize;
    DWORD DriveCleanTimeout;
    DWORD Features0;
    DWORD Features1;
    BYTE  MoveFromTransport;
    BYTE  MoveFromSlot;
    BYTE  MoveFromIePort;
    BYTE  MoveFromDrive;
    BYTE  ExchangeFromTransport;
    BYTE  ExchangeFromSlot;
    BYTE  ExchangeFromIePort;
    BYTE  ExchangeFromDrive;
    BYTE  LockUnlockCapabilities;
    BYTE  PositionCapabilities;
    BYTE  Reserved1[2];
    DWORD Reserved2[2];
} GET_CHANGER_PARAMETERS, * PGET_CHANGER_PARAMETERS;

typedef  struct _CHANGER_PRODUCT_DATA {
    BYTE  VendorId[8];
    BYTE  ProductId[16];
    BYTE  Revision[4];
    BYTE  SerialNumber[32];
    BYTE  DeviceType;
} CHANGER_PRODUCT_DATA, *PCHANGER_PRODUCT_DATA;

typedef struct _CHANGER_SET_ACCESS {
    CHANGER_ELEMENT Element;
    DWORD           Control;
} CHANGER_SET_ACCESS, *PCHANGER_SET_ACCESS;

typedef struct _CHANGER_READ_ELEMENT_STATUS {
    CHANGER_ELEMENT_LIST ElementList;
    BOOLEAN VolumeTagInfo;
} CHANGER_READ_ELEMENT_STATUS, *PCHANGER_READ_ELEMENT_STATUS;
typedef  struct _CHANGER_ELEMENT_STATUS {
    CHANGER_ELEMENT Element;
    CHANGER_ELEMENT SrcElementAddress;
    DWORD Flags;
    DWORD ExceptionCode;
    BYTE  TargetId;
    BYTE  Lun;
    WORD   Reserved;
    BYTE  PrimaryVolumeID[36];
    BYTE  AlternateVolumeID[36];
} CHANGER_ELEMENT_STATUS, *PCHANGER_ELEMENT_STATUS;
typedef  struct _CHANGER_ELEMENT_STATUS_EX {
    CHANGER_ELEMENT Element;
    CHANGER_ELEMENT SrcElementAddress;
    DWORD Flags;
    DWORD ExceptionCode;
    BYTE  TargetId;
    BYTE  Lun;
    WORD   Reserved;
    BYTE  PrimaryVolumeID[36];
    BYTE  AlternateVolumeID[36];
    BYTE  VendorIdentification[8];
    BYTE  ProductIdentification[16];
    BYTE  SerialNumber[32];
} CHANGER_ELEMENT_STATUS_EX, *PCHANGER_ELEMENT_STATUS_EX;

typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS {
    CHANGER_ELEMENT_LIST ElementList;
    BOOLEAN BarCodeScan;
} CHANGER_INITIALIZE_ELEMENT_STATUS, *PCHANGER_INITIALIZE_ELEMENT_STATUS;

typedef struct _CHANGER_SET_POSITION {
    CHANGER_ELEMENT Transport;
    CHANGER_ELEMENT Destination;
    BOOLEAN         Flip;
} CHANGER_SET_POSITION, *PCHANGER_SET_POSITION;

typedef struct _CHANGER_EXCHANGE_MEDIUM {
    CHANGER_ELEMENT Transport;
    CHANGER_ELEMENT Source;
    CHANGER_ELEMENT Destination1;
    CHANGER_ELEMENT Destination2;
    BOOLEAN         Flip1;
    BOOLEAN         Flip2;
} CHANGER_EXCHANGE_MEDIUM, *PCHANGER_EXCHANGE_MEDIUM;

typedef struct _CHANGER_MOVE_MEDIUM {
    CHANGER_ELEMENT Transport;
    CHANGER_ELEMENT Source;
    CHANGER_ELEMENT Destination;
    BOOLEAN         Flip;
} CHANGER_MOVE_MEDIUM, *PCHANGER_MOVE_MEDIUM;

typedef  struct _CHANGER_SEND_VOLUME_TAG_INFORMATION {
    CHANGER_ELEMENT StartingElement;
    DWORD ActionCode;
    BYTE  VolumeIDTemplate[40];
} CHANGER_SEND_VOLUME_TAG_INFORMATION, *PCHANGER_SEND_VOLUME_TAG_INFORMATION;
typedef struct _READ_ELEMENT_ADDRESS_INFO {
    DWORD NumberOfElements;
    CHANGER_ELEMENT_STATUS ElementStatus[1];
} READ_ELEMENT_ADDRESS_INFO, *PREAD_ELEMENT_ADDRESS_INFO;
typedef enum _CHANGER_DEVICE_PROBLEM_TYPE {
   DeviceProblemNone,
   DeviceProblemHardware,
   DeviceProblemCHMError,
   DeviceProblemDoorOpen,
   DeviceProblemCalibrationError,
   DeviceProblemTargetFailure,
   DeviceProblemCHMMoveError,
   DeviceProblemCHMZeroError,
   DeviceProblemCartridgeInsertError,
   DeviceProblemPositionError,
   DeviceProblemSensorError,
   DeviceProblemCartridgeEjectError,
   DeviceProblemGripperError,
   DeviceProblemDriveError
} CHANGER_DEVICE_PROBLEM_TYPE, *PCHANGER_DEVICE_PROBLEM_TYPE;
typedef struct _PATHNAME_BUFFER {
    DWORD PathNameLength;
    WCHAR Name[1];
} PATHNAME_BUFFER, *PPATHNAME_BUFFER;
typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
    BYTE  First0x24BytesOfBootSector[0x24];
} FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
typedef struct {
    LARGE_INTEGER VolumeSerialNumber;
    LARGE_INTEGER NumberSectors;
    LARGE_INTEGER TotalClusters;
    LARGE_INTEGER FreeClusters;
    LARGE_INTEGER TotalReserved;
    DWORD BytesPerSector;
    DWORD BytesPerCluster;
    DWORD BytesPerFileRecordSegment;
    DWORD ClustersPerFileRecordSegment;
    LARGE_INTEGER MftValidDataLength;
    LARGE_INTEGER MftStartLcn;
    LARGE_INTEGER Mft2StartLcn;
    LARGE_INTEGER MftZoneStart;
    LARGE_INTEGER MftZoneEnd;
} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
typedef struct {
    DWORD ByteCount;
    WORD   MajorVersion;
    WORD   MinorVersion;
} NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
typedef struct {
    LARGE_INTEGER StartingLcn;
} STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
typedef struct {
    LARGE_INTEGER StartingLcn;
    LARGE_INTEGER BitmapSize;
    BYTE  Buffer[1];
} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
typedef struct {
    LARGE_INTEGER StartingVcn;
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
typedef struct RETRIEVAL_POINTERS_BUFFER {
    DWORD ExtentCount;
    LARGE_INTEGER StartingVcn;
    struct {
        LARGE_INTEGER NextVcn;
        LARGE_INTEGER Lcn;
    } Extents[1];
} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
typedef struct {
    LARGE_INTEGER FileReferenceNumber;
} NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
typedef struct {
    LARGE_INTEGER FileReferenceNumber;
    DWORD FileRecordLength;
    BYTE  FileRecordBuffer[1];
} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
typedef struct {
    HANDLE FileHandle;
    LARGE_INTEGER StartingVcn;
    LARGE_INTEGER StartingLcn;
    DWORD ClusterCount;
} MOVE_FILE_DATA, *PMOVE_FILE_DATA;
typedef struct {
    HANDLE FileHandle;
    LARGE_INTEGER SourceFileRecord;
    LARGE_INTEGER TargetFileRecord;
} MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
typedef struct {
    DWORD Restart;
    SID Sid;
} FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
typedef struct {
    DWORD NextEntryOffset;
    DWORD FileIndex;
    DWORD FileNameLength;
    WCHAR FileName[1];
} FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
typedef struct {
    DWORDLONG StartFileReferenceNumber;
    USN LowUsn;
    USN HighUsn;
} MFT_ENUM_DATA, *PMFT_ENUM_DATA;
typedef struct {
    DWORDLONG MaximumSize;
    DWORDLONG AllocationDelta;
} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
typedef struct {
    USN StartUsn;
    DWORD ReasonMask;
    DWORD ReturnOnlyOnClose;
    DWORDLONG Timeout;
    DWORDLONG BytesToWaitFor;
    DWORDLONG UsnJournalID;
} READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
typedef struct {
    DWORD RecordLength;
    WORD   MajorVersion;
    WORD   MinorVersion;
    DWORDLONG FileReferenceNumber;
    DWORDLONG ParentFileReferenceNumber;
    USN Usn;
    LARGE_INTEGER TimeStamp;
    DWORD Reason;
    DWORD SourceInfo;
    DWORD SecurityId;
    DWORD FileAttributes;
    WORD   FileNameLength;
    WORD   FileNameOffset;
    WCHAR FileName[1];
} USN_RECORD, *PUSN_RECORD;
typedef struct {
    DWORDLONG UsnJournalID;
    USN FirstUsn;
    USN NextUsn;
    USN LowestValidUsn;
    USN MaxUsn;
    DWORDLONG MaximumSize;
    DWORDLONG AllocationDelta;
} USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
typedef struct {
    DWORDLONG UsnJournalID;
    DWORD DeleteFlags;
} DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
typedef struct {
    DWORD UsnSourceInfo;
    HANDLE VolumeHandle;
    DWORD HandleInfo;
} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
typedef struct {
    ACCESS_MASK DesiredAccess;
    DWORD SecurityIds[1];
} BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
typedef struct _FILE_PREFETCH {
    DWORD Type;
    DWORD Count;
    DWORDLONG Prefetch[1];
} FILE_PREFETCH, *PFILE_PREFETCH;
typedef struct _FILE_PREFETCH_EX {
    DWORD Type;
    DWORD Count;
    PVOID Context;
    DWORDLONG Prefetch[1];
} FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
typedef struct _VOLUME_COMPRESSION_STATE {
    BOOLEAN CompressNewFiles;
} VOLUME_COMPRESSION_STATE, *PVOLUME_COMPRESSION_STATE;
typedef struct _FILESYSTEM_STATISTICS {
    WORD   FileSystemType;
    WORD   Version;
    DWORD SizeOfCompleteStructure;
    DWORD UserFileReads;
    DWORD UserFileReadBytes;
    DWORD UserDiskReads;
    DWORD UserFileWrites;
    DWORD UserFileWriteBytes;
    DWORD UserDiskWrites;
    DWORD MetaDataReads;
    DWORD MetaDataReadBytes;
    DWORD MetaDataDiskReads;
    DWORD MetaDataWrites;
    DWORD MetaDataWriteBytes;
    DWORD MetaDataDiskWrites;
} FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
typedef struct _FAT_STATISTICS {
    DWORD CreateHits;
    DWORD SuccessfulCreates;
    DWORD FailedCreates;
    DWORD NonCachedReads;
    DWORD NonCachedReadBytes;
    DWORD NonCachedWrites;
    DWORD NonCachedWriteBytes;
    DWORD NonCachedDiskReads;
    DWORD NonCachedDiskWrites;
} FAT_STATISTICS, *PFAT_STATISTICS;
typedef struct _NTFS_STATISTICS {
    DWORD LogFileFullExceptions;
    DWORD OtherExceptions;
    DWORD MftReads;
    DWORD MftReadBytes;
    DWORD MftWrites;
    DWORD MftWriteBytes;
    struct {
        WORD   Write;
        WORD   Create;
        WORD   SetInfo;
        WORD   Flush;
    } MftWritesUserLevel;
    WORD   MftWritesFlushForLogFileFull;
    WORD   MftWritesLazyWriter;
    WORD   MftWritesUserRequest;
    DWORD Mft2Writes;
    DWORD Mft2WriteBytes;
    struct {
        WORD   Write;
        WORD   Create;
        WORD   SetInfo;
        WORD   Flush;
    } Mft2WritesUserLevel;
    WORD   Mft2WritesFlushForLogFileFull;
    WORD   Mft2WritesLazyWriter;
    WORD   Mft2WritesUserRequest;
    DWORD RootIndexReads;
    DWORD RootIndexReadBytes;
    DWORD RootIndexWrites;
    DWORD RootIndexWriteBytes;
    DWORD BitmapReads;
    DWORD BitmapReadBytes;
    DWORD BitmapWrites;
    DWORD BitmapWriteBytes;
    WORD   BitmapWritesFlushForLogFileFull;
    WORD   BitmapWritesLazyWriter;
    WORD   BitmapWritesUserRequest;
    struct {
        WORD   Write;
        WORD   Create;
        WORD   SetInfo;
    } BitmapWritesUserLevel;
    DWORD MftBitmapReads;
    DWORD MftBitmapReadBytes;
    DWORD MftBitmapWrites;
    DWORD MftBitmapWriteBytes;
    WORD   MftBitmapWritesFlushForLogFileFull;
    WORD   MftBitmapWritesLazyWriter;
    WORD   MftBitmapWritesUserRequest;
    struct {
        WORD   Write;
        WORD   Create;
        WORD   SetInfo;
        WORD   Flush;
    } MftBitmapWritesUserLevel;
    DWORD UserIndexReads;
    DWORD UserIndexReadBytes;
    DWORD UserIndexWrites;
    DWORD UserIndexWriteBytes;
    DWORD LogFileReads;
    DWORD LogFileReadBytes;
    DWORD LogFileWrites;
    DWORD LogFileWriteBytes;
    struct {
        DWORD Calls;
        DWORD Clusters;
        DWORD Hints;
        DWORD RunsReturned;
        DWORD HintsHonored;
        DWORD HintsClusters;
        DWORD Cache;
        DWORD CacheClusters;
        DWORD CacheMiss;
        DWORD CacheMissClusters;
    } Allocate;
} NTFS_STATISTICS, *PNTFS_STATISTICS;
typedef struct _FILE_OBJECTID_BUFFER {
    BYTE  ObjectId[16];
    union {
        struct {
            BYTE  BirthVolumeId[16];
            BYTE  BirthObjectId[16];
            BYTE  DomainId[16];
        } ;
        BYTE  ExtendedInfo[48];
    };
} FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
typedef struct _FILE_SET_SPARSE_BUFFER {
    BOOLEAN SetSparse;
} FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
typedef struct _FILE_ZERO_DATA_INFORMATION {
    LARGE_INTEGER FileOffset;
    LARGE_INTEGER BeyondFinalZero;
} FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
    LARGE_INTEGER FileOffset;
    LARGE_INTEGER Length;
} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
typedef struct _ENCRYPTION_BUFFER {
    DWORD EncryptionOperation;
    BYTE  Private[1];
} ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
typedef struct _DECRYPTION_STATUS_BUFFER {
    BOOLEAN NoEncryptedStreams;
} DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
    LONGLONG FileOffset;
    DWORD Length;
} REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
typedef struct _ENCRYPTED_DATA_INFO {
    DWORDLONG StartingFileOffset;
    DWORD OutputBufferOffset;
    DWORD BytesWithinFileSize;
    DWORD BytesWithinValidDataLength;
    WORD   CompressionFormat;
    BYTE  DataUnitShift;
    BYTE  ChunkShift;
    BYTE  ClusterShift;
    BYTE  EncryptionFormat;
    WORD   NumberOfDataBlocks;
    DWORD DataBlockSize[1];
} ENCRYPTED_DATA_INFO;
typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO;
typedef struct _PLEX_READ_DATA_REQUEST {
    LARGE_INTEGER ByteOffset;
    DWORD ByteLength;
    DWORD PlexNumber;
} PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
typedef struct _SI_COPYFILE {
    DWORD SourceFileNameLength;
    DWORD DestinationFileNameLength;
    DWORD Flags;
    WCHAR FileNameBuffer[1];
} SI_COPYFILE, *PSI_COPYFILE;
typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
    BOOLEAN CloseDisc;
} FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
    BOOLEAN Disable;
} FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
typedef struct _FILE_QUERY_SPARING_BUFFER {
    DWORD SparingUnitBytes;
    BOOLEAN SoftwareSparing;
    DWORD TotalSpareBlocks;
    DWORD FreeSpareBlocks;
} FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
    LARGE_INTEGER DirectoryCount;
    LARGE_INTEGER FileCount;
    WORD   FsFormatMajVersion;
    WORD   FsFormatMinVersion;
    WCHAR FsFormatName[ 12];
    LARGE_INTEGER FormatTime;
    LARGE_INTEGER LastUpdateTime;
    WCHAR CopyrightInfo[ 34];
    WCHAR AbstractInfo[ 34];
    WCHAR FormattingImplementationInfo[ 34];
    WCHAR LastModifyingImplementationInfo[ 34];
} FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
    ShrinkPrepare = 1,
    ShrinkCommit,
    ShrinkAbort
} SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
typedef struct _SHRINK_VOLUME_INFORMATION
{
    SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
    DWORDLONG Flags;
    LONGLONG NewNumberOfSectors;
} SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
typedef struct _TXFS_MODIFY_RM {
    DWORD Flags;
    DWORD LogContainerCountMax;
    DWORD LogContainerCountMin;
    DWORD LogContainerCount;
    DWORD LogGrowthIncrement;
    DWORD LogAutoShrinkPercentage;
    DWORDLONG Reserved;
    WORD   LoggingMode;
} TXFS_MODIFY_RM,
 *PTXFS_MODIFY_RM;
typedef struct _TXFS_QUERY_RM_INFORMATION {
    DWORD BytesRequired;
    DWORDLONG TailLsn;
    DWORDLONG CurrentLsn;
    DWORDLONG ArchiveTailLsn;
    DWORDLONG LogContainerSize;
    LARGE_INTEGER HighestVirtualClock;
    DWORD LogContainerCount;
    DWORD LogContainerCountMax;
    DWORD LogContainerCountMin;
    DWORD LogGrowthIncrement;
    DWORD LogAutoShrinkPercentage;
    DWORD Flags;
    WORD   LoggingMode;
    WORD   Reserved;
    DWORD RmState;
    DWORDLONG LogCapacity;
    DWORDLONG LogFree;
    DWORDLONG TopsSize;
    DWORDLONG TopsUsed;
    DWORDLONG TransactionCount;
    DWORDLONG OnePCCount;
    DWORDLONG TwoPCCount;
    DWORDLONG NumberLogFileFull;
    DWORDLONG OldestTransactionAge;
    GUID RMName;
    DWORD TmLogPathOffset;
} TXFS_QUERY_RM_INFORMATION,
 *PTXFS_QUERY_RM_INFORMATION;
typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
    LARGE_INTEGER  LastVirtualClock;
    DWORDLONG LastRedoLsn;
    DWORDLONG HighestRecoveryLsn;
    DWORD Flags;
} TXFS_ROLLFORWARD_REDO_INFORMATION,
 *PTXFS_ROLLFORWARD_REDO_INFORMATION;
typedef struct _TXFS_START_RM_INFORMATION {
    DWORD Flags;
    DWORDLONG LogContainerSize;
    DWORD LogContainerCountMin;
    DWORD LogContainerCountMax;
    DWORD LogGrowthIncrement;
    DWORD LogAutoShrinkPercentage;
    DWORD TmLogPathOffset;
    WORD   TmLogPathLength;
    WORD   LoggingMode;
    WORD   LogPathLength;
    WORD   Reserved;
    WCHAR LogPath[1];
} TXFS_START_RM_INFORMATION,
 *PTXFS_START_RM_INFORMATION;
typedef struct _TXFS_GET_METADATA_INFO_OUT {
    struct {
        LONGLONG LowPart;
        LONGLONG HighPart;
    } TxfFileId;
    GUID LockingTransaction;
    DWORDLONG LastLsn;
    DWORD TransactionState;
} TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
    DWORDLONG Offset;
    DWORD UsnReason;
    LONGLONG FileId;
    DWORD Reserved1;
    DWORD Reserved2;
    LONGLONG Reserved3;
    WCHAR FileName[1];
} TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
    GUID KtmTransaction;
    DWORDLONG NumberOfFiles;
    DWORDLONG BufferSizeRequired;
    DWORDLONG Offset;
} TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
    GUID TransactionId;
    DWORD TransactionState;
    DWORD Reserved1;
    DWORD Reserved2;
    LONGLONG Reserved3;
} TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
typedef struct _TXFS_LIST_TRANSACTIONS {
    DWORDLONG NumberOfTransactions;
    DWORDLONG BufferSizeRequired;
} TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
    union {
        DWORD BufferLength;
        BYTE  Buffer[1];
    };
} TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
    BYTE  Buffer[1];
} TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
typedef struct _TXFS_GET_TRANSACTED_VERSION {
    DWORD ThisBaseVersion;
    DWORD LatestVersion;
    WORD   ThisMiniVersion;
    WORD   FirstMiniVersion;
    WORD   LatestMiniVersion;
} TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
typedef struct _TXFS_CREATE_MINIVERSION_INFO {
    WORD   StructureVersion;
    WORD   StructureLength;
    DWORD BaseVersion;
    WORD   MiniVersion;
} TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
    BOOLEAN TransactionsActiveAtSnapshot;
} TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
typedef struct _DISK_EXTENT {
    DWORD           DiskNumber;
    LARGE_INTEGER   StartingOffset;
    LARGE_INTEGER   ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
typedef struct _VOLUME_DISK_EXTENTS {
    DWORD       NumberOfDiskExtents;
    DISK_EXTENT Extents[1];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
typedef DWORD ULONG;
typedef WORD UWORD;
typedef BYTE UCHAR;
typedef struct _SCARD_IO_REQUEST{
    DWORD dwProtocol;
    DWORD cbPciLength;
} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
typedef struct {
    BYTE
        bCla,
        bIns,
        bP1,
        bP2,
        bP3;
} SCARD_T0_COMMAND, *LPSCARD_T0_COMMAND;
typedef struct {
    SCARD_IO_REQUEST ioRequest;
    BYTE
        bSw1,
        bSw2;
    union
    {
        SCARD_T0_COMMAND CmdBytes;
        BYTE rgbHeader[5];
    };
} SCARD_T0_REQUEST;
typedef SCARD_T0_REQUEST *PSCARD_T0_REQUEST, *LPSCARD_T0_REQUEST;
typedef struct {
    SCARD_IO_REQUEST ioRequest;
} SCARD_T1_REQUEST;
typedef SCARD_T1_REQUEST *PSCARD_T1_REQUEST, *LPSCARD_T1_REQUEST;
typedef const BYTE *LPCBYTE;
typedef const void *LPCVOID;
 extern const SCARD_IO_REQUEST
    g_rgSCardT0Pci,
    g_rgSCardT1Pci,
    g_rgSCardRawPci;
typedef ULONG_PTR SCARDCONTEXT;
typedef SCARDCONTEXT *PSCARDCONTEXT, *LPSCARDCONTEXT;
typedef ULONG_PTR SCARDHANDLE;
typedef SCARDHANDLE *PSCARDHANDLE, *LPSCARDHANDLE;
extern  LONG
SCardEstablishContext(
      DWORD dwScope,
      LPCVOID pvReserved1,
      LPCVOID pvReserved2,
     LPSCARDCONTEXT phContext);
extern  LONG
SCardReleaseContext(
          SCARDCONTEXT hContext);
extern  LONG
SCardIsValidContext(
          SCARDCONTEXT hContext);
extern  LONG
SCardListReaderGroupsA(
          SCARDCONTEXT hContext,
         LPSTR mszGroups,
       LPDWORD pcchGroups);
extern  LONG
SCardListReaderGroupsW(
          SCARDCONTEXT hContext,
         LPWSTR mszGroups,
       LPDWORD pcchGroups);
extern  LONG
SCardListReadersA(
          SCARDCONTEXT hContext,
          LPCSTR mszGroups,
         LPSTR mszReaders,
       LPDWORD pcchReaders);
extern  LONG
SCardListReadersW(
          SCARDCONTEXT hContext,
          LPCWSTR mszGroups,
         LPWSTR mszReaders,
       LPDWORD pcchReaders);
extern  LONG
SCardListCardsA(
          SCARDCONTEXT hContext,
          LPCBYTE pbAtr,
          LPCGUID rgquidInterfaces,
          DWORD cguidInterfaceCount,
         LPSTR mszCards,
       LPDWORD pcchCards);
extern  LONG
SCardListCardsW(
          SCARDCONTEXT hContext,
          LPCBYTE pbAtr,
          LPCGUID rgquidInterfaces,
          DWORD cguidInterfaceCount,
         LPWSTR mszCards,
       LPDWORD pcchCards);
extern  LONG
SCardListInterfacesA(
          SCARDCONTEXT hContext,
          LPCSTR szCard,
         LPGUID pguidInterfaces,
       LPDWORD pcguidInterfaces);
extern  LONG
SCardListInterfacesW(
          SCARDCONTEXT hContext,
          LPCWSTR szCard,
         LPGUID pguidInterfaces,
       LPDWORD pcguidInterfaces);
extern  LONG
SCardGetProviderIdA(
          SCARDCONTEXT hContext,
          LPCSTR szCard,
         LPGUID pguidProviderId);
extern  LONG
SCardGetProviderIdW(
          SCARDCONTEXT hContext,
          LPCWSTR szCard,
         LPGUID pguidProviderId);
extern  LONG
SCardGetCardTypeProviderNameA(
     SCARDCONTEXT hContext,
     LPCSTR szCardName,
     DWORD dwProviderId,
     LPSTR szProvider,
      LPDWORD pcchProvider);
extern  LONG
SCardGetCardTypeProviderNameW(
     SCARDCONTEXT hContext,
     LPCWSTR szCardName,
     DWORD dwProviderId,
     LPWSTR szProvider,
      LPDWORD pcchProvider);
extern  LONG
SCardIntroduceReaderGroupA(
     SCARDCONTEXT hContext,
     LPCSTR szGroupName);
extern  LONG
SCardIntroduceReaderGroupW(
     SCARDCONTEXT hContext,
     LPCWSTR szGroupName);
extern  LONG
SCardForgetReaderGroupA(
     SCARDCONTEXT hContext,
     LPCSTR szGroupName);
extern  LONG
SCardForgetReaderGroupW(
     SCARDCONTEXT hContext,
     LPCWSTR szGroupName);
extern  LONG
SCardIntroduceReaderA(
     SCARDCONTEXT hContext,
     LPCSTR szReaderName,
     LPCSTR szDeviceName);
extern  LONG
SCardIntroduceReaderW(
     SCARDCONTEXT hContext,
     LPCWSTR szReaderName,
     LPCWSTR szDeviceName);
extern  LONG
SCardForgetReaderA(
     SCARDCONTEXT hContext,
     LPCSTR szReaderName);
extern  LONG
SCardForgetReaderW(
     SCARDCONTEXT hContext,
     LPCWSTR szReaderName);
extern  LONG
SCardAddReaderToGroupA(
     SCARDCONTEXT hContext,
     LPCSTR szReaderName,
     LPCSTR szGroupName);
extern  LONG
SCardAddReaderToGroupW(
     SCARDCONTEXT hContext,
     LPCWSTR szReaderName,
     LPCWSTR szGroupName);
extern  LONG
SCardRemoveReaderFromGroupA(
     SCARDCONTEXT hContext,
     LPCSTR szReaderName,
     LPCSTR szGroupName);
extern  LONG
SCardRemoveReaderFromGroupW(
     SCARDCONTEXT hContext,
     LPCWSTR szReaderName,
     LPCWSTR szGroupName);
extern  LONG
SCardIntroduceCardTypeA(
     SCARDCONTEXT hContext,
     LPCSTR szCardName,
     LPCGUID pguidPrimaryProvider,
     LPCGUID rgguidInterfaces,
     DWORD dwInterfaceCount,
     LPCBYTE pbAtr,
     LPCBYTE pbAtrMask,
     DWORD cbAtrLen);
extern  LONG
SCardIntroduceCardTypeW(
     SCARDCONTEXT hContext,
     LPCWSTR szCardName,
     LPCGUID pguidPrimaryProvider,
     LPCGUID rgguidInterfaces,
     DWORD dwInterfaceCount,
     LPCBYTE pbAtr,
     LPCBYTE pbAtrMask,
     DWORD cbAtrLen);
extern  LONG
SCardSetCardTypeProviderNameA(
     SCARDCONTEXT hContext,
     LPCSTR szCardName,
     DWORD dwProviderId,
     LPCSTR szProvider);
extern  LONG
SCardSetCardTypeProviderNameW(
     SCARDCONTEXT hContext,
     LPCWSTR szCardName,
     DWORD dwProviderId,
     LPCWSTR szProvider);
extern  LONG
SCardForgetCardTypeA(
     SCARDCONTEXT hContext,
     LPCSTR szCardName);
extern  LONG
SCardForgetCardTypeW(
     SCARDCONTEXT hContext,
     LPCWSTR szCardName);
extern  LONG
SCardFreeMemory(
     SCARDCONTEXT hContext,
     LPCVOID pvMem);
extern  HANDLE
SCardAccessStartedEvent(void);
extern  void
SCardReleaseStartedEvent(void);
typedef struct {
    LPCSTR      szReader;
    LPVOID      pvUserData;
    DWORD       dwCurrentState;
    DWORD       dwEventState;
    DWORD       cbAtr;
    BYTE        rgbAtr[36];
} SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
typedef struct {
    LPCWSTR     szReader;
    LPVOID      pvUserData;
    DWORD       dwCurrentState;
    DWORD       dwEventState;
    DWORD       cbAtr;
    BYTE        rgbAtr[36];
} SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;
typedef SCARD_READERSTATEA SCARD_READERSTATE;
typedef PSCARD_READERSTATEA PSCARD_READERSTATE;
typedef LPSCARD_READERSTATEA LPSCARD_READERSTATE;
extern  LONG
SCardLocateCardsA(
          SCARDCONTEXT hContext,
          LPCSTR mszCards,
       LPSCARD_READERSTATEA rgReaderStates,
          DWORD cReaders);
extern  LONG
SCardLocateCardsW(
          SCARDCONTEXT hContext,
          LPCWSTR mszCards,
       LPSCARD_READERSTATEW rgReaderStates,
          DWORD cReaders);
typedef struct _SCARD_ATRMASK {
    DWORD       cbAtr;
    BYTE        rgbAtr[36];
    BYTE        rgbMask[36];
} SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
extern  LONG
SCardLocateCardsByATRA(
          SCARDCONTEXT hContext,
          LPSCARD_ATRMASK rgAtrMasks,
          DWORD cAtrs,
       LPSCARD_READERSTATEA rgReaderStates,
          DWORD cReaders);
extern  LONG
SCardLocateCardsByATRW(
          SCARDCONTEXT hContext,
          LPSCARD_ATRMASK rgAtrMasks,
          DWORD cAtrs,
       LPSCARD_READERSTATEW rgReaderStates,
          DWORD cReaders);
extern  LONG
SCardGetStatusChangeA(
          SCARDCONTEXT hContext,
          DWORD dwTimeout,
       LPSCARD_READERSTATEA rgReaderStates,
          DWORD cReaders);
extern  LONG
SCardGetStatusChangeW(
          SCARDCONTEXT hContext,
          DWORD dwTimeout,
       LPSCARD_READERSTATEW rgReaderStates,
          DWORD cReaders);
extern  LONG
SCardCancel(
          SCARDCONTEXT hContext);
extern  LONG
SCardConnectA(
          SCARDCONTEXT hContext,
          LPCSTR szReader,
          DWORD dwShareMode,
          DWORD dwPreferredProtocols,
         LPSCARDHANDLE phCard,
         LPDWORD pdwActiveProtocol);
extern  LONG
SCardConnectW(
          SCARDCONTEXT hContext,
          LPCWSTR szReader,
          DWORD dwShareMode,
          DWORD dwPreferredProtocols,
         LPSCARDHANDLE phCard,
         LPDWORD pdwActiveProtocol);
extern  LONG
SCardReconnect(
          SCARDHANDLE hCard,
          DWORD dwShareMode,
          DWORD dwPreferredProtocols,
          DWORD dwInitialization,
         LPDWORD pdwActiveProtocol);
extern  LONG
SCardDisconnect(
          SCARDHANDLE hCard,
          DWORD dwDisposition);
extern  LONG
SCardBeginTransaction(
          SCARDHANDLE hCard);
extern  LONG
SCardEndTransaction(
          SCARDHANDLE hCard,
          DWORD dwDisposition);
extern  LONG
SCardCancelTransaction(
          SCARDHANDLE hCard);
extern  LONG
SCardState(
     SCARDHANDLE hCard,
     LPDWORD pdwState,
     LPDWORD pdwProtocol,
     LPBYTE pbAtr,
      LPDWORD pcbAtrLen);
extern  LONG
SCardStatusA(
     SCARDHANDLE hCard,
     LPSTR szReaderName,
      LPDWORD pcchReaderLen,
     LPDWORD pdwState,
     LPDWORD pdwProtocol,
     LPBYTE pbAtr,
      LPDWORD pcbAtrLen);
extern  LONG
SCardStatusW(
     SCARDHANDLE hCard,
     LPWSTR szReaderName,
      LPDWORD pcchReaderLen,
     LPDWORD pdwState,
     LPDWORD pdwProtocol,
     LPBYTE pbAtr,
      LPDWORD pcbAtrLen);
extern  LONG
SCardTransmit(
     SCARDHANDLE hCard,
     LPCSCARD_IO_REQUEST pioSendPci,
     LPCBYTE pbSendBuffer,
     DWORD cbSendLength,
      LPSCARD_IO_REQUEST pioRecvPci,
     LPBYTE pbRecvBuffer,
      LPDWORD pcbRecvLength);
extern  LONG
SCardGetTransmitCount(
     SCARDHANDLE hCard,
     LPDWORD pcTransmitCount);
extern  LONG
SCardControl(
          SCARDHANDLE hCard,
          DWORD dwControlCode,
          LPCVOID lpInBuffer,
          DWORD nInBufferSize,
         LPVOID lpOutBuffer,
          DWORD nOutBufferSize,
         LPDWORD lpBytesReturned);
extern  LONG
SCardGetAttrib(
     SCARDHANDLE hCard,
     DWORD dwAttrId,
     LPBYTE pbAttr,
      LPDWORD pcbAttrLen);
extern  LONG
SCardSetAttrib(
     SCARDHANDLE hCard,
     DWORD dwAttrId,
     LPCBYTE pbAttr,
     DWORD cbAttrLen);
typedef SCARDHANDLE ( *LPOCNCONNPROCA) ( SCARDCONTEXT,  LPSTR,  LPSTR,  PVOID);
typedef SCARDHANDLE ( *LPOCNCONNPROCW) ( SCARDCONTEXT,  LPWSTR,  LPWSTR,  PVOID);
typedef BOOL ( *LPOCNCHKPROC) ( SCARDCONTEXT,  SCARDHANDLE,  PVOID);
typedef void ( *LPOCNDSCPROC) ( SCARDCONTEXT,  SCARDHANDLE,  PVOID);
typedef struct {
    DWORD           dwStructSize;
    LPSTR           lpstrGroupNames;
    DWORD           nMaxGroupNames;
    LPCGUID         rgguidInterfaces;
    DWORD           cguidInterfaces;
    LPSTR           lpstrCardNames;
    DWORD           nMaxCardNames;
    LPOCNCHKPROC    lpfnCheck;
    LPOCNCONNPROCA  lpfnConnect;
    LPOCNDSCPROC    lpfnDisconnect;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
} OPENCARD_SEARCH_CRITERIAA, *POPENCARD_SEARCH_CRITERIAA, *LPOPENCARD_SEARCH_CRITERIAA;
typedef struct {
    DWORD           dwStructSize;
    LPWSTR          lpstrGroupNames;
    DWORD           nMaxGroupNames;
    LPCGUID         rgguidInterfaces;
    DWORD           cguidInterfaces;
    LPWSTR          lpstrCardNames;
    DWORD           nMaxCardNames;
    LPOCNCHKPROC    lpfnCheck;
    LPOCNCONNPROCW  lpfnConnect;
    LPOCNDSCPROC    lpfnDisconnect;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
} OPENCARD_SEARCH_CRITERIAW, *POPENCARD_SEARCH_CRITERIAW, *LPOPENCARD_SEARCH_CRITERIAW;
typedef OPENCARD_SEARCH_CRITERIAA OPENCARD_SEARCH_CRITERIA;
typedef POPENCARD_SEARCH_CRITERIAA POPENCARD_SEARCH_CRITERIA;
typedef LPOPENCARD_SEARCH_CRITERIAA LPOPENCARD_SEARCH_CRITERIA;
typedef struct {
    DWORD           dwStructSize;
    SCARDCONTEXT    hSCardContext;
    HWND            hwndOwner;
    DWORD           dwFlags;
    LPCSTR          lpstrTitle;
    LPCSTR          lpstrSearchDesc;
    HICON           hIcon;
    POPENCARD_SEARCH_CRITERIAA pOpenCardSearchCriteria;
    LPOCNCONNPROCA  lpfnConnect;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
    LPSTR           lpstrRdr;
    DWORD           nMaxRdr;
    LPSTR           lpstrCard;
    DWORD           nMaxCard;
    DWORD           dwActiveProtocol;
    SCARDHANDLE     hCardHandle;
} OPENCARDNAME_EXA, *POPENCARDNAME_EXA, *LPOPENCARDNAME_EXA;
typedef struct {
    DWORD           dwStructSize;
    SCARDCONTEXT    hSCardContext;
    HWND            hwndOwner;
    DWORD           dwFlags;
    LPCWSTR         lpstrTitle;
    LPCWSTR         lpstrSearchDesc;
    HICON           hIcon;
    POPENCARD_SEARCH_CRITERIAW pOpenCardSearchCriteria;
    LPOCNCONNPROCW  lpfnConnect;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
    LPWSTR          lpstrRdr;
    DWORD           nMaxRdr;
    LPWSTR          lpstrCard;
    DWORD           nMaxCard;
    DWORD           dwActiveProtocol;
    SCARDHANDLE     hCardHandle;
} OPENCARDNAME_EXW, *POPENCARDNAME_EXW, *LPOPENCARDNAME_EXW;
typedef OPENCARDNAME_EXA OPENCARDNAME_EX;
typedef POPENCARDNAME_EXA POPENCARDNAME_EX;
typedef LPOPENCARDNAME_EXA LPOPENCARDNAME_EX;
extern  LONG
SCardUIDlgSelectCardA(
    LPOPENCARDNAME_EXA);
extern  LONG
SCardUIDlgSelectCardW(
    LPOPENCARDNAME_EXW);
typedef struct {
    DWORD           dwStructSize;
    HWND            hwndOwner;
    SCARDCONTEXT    hSCardContext;
    LPSTR           lpstrGroupNames;
    DWORD           nMaxGroupNames;
    LPSTR           lpstrCardNames;
    DWORD           nMaxCardNames;
    LPCGUID         rgguidInterfaces;
    DWORD           cguidInterfaces;
    LPSTR           lpstrRdr;
    DWORD           nMaxRdr;
    LPSTR           lpstrCard;
    DWORD           nMaxCard;
    LPCSTR          lpstrTitle;
    DWORD           dwFlags;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
    DWORD           dwActiveProtocol;
    LPOCNCONNPROCA  lpfnConnect;
    LPOCNCHKPROC    lpfnCheck;
    LPOCNDSCPROC    lpfnDisconnect;
    SCARDHANDLE     hCardHandle;
} OPENCARDNAMEA, *POPENCARDNAMEA, *LPOPENCARDNAMEA;
typedef struct {
    DWORD           dwStructSize;
    HWND            hwndOwner;
    SCARDCONTEXT    hSCardContext;
    LPWSTR          lpstrGroupNames;
    DWORD           nMaxGroupNames;
    LPWSTR          lpstrCardNames;
    DWORD           nMaxCardNames;
    LPCGUID         rgguidInterfaces;
    DWORD           cguidInterfaces;
    LPWSTR          lpstrRdr;
    DWORD           nMaxRdr;
    LPWSTR          lpstrCard;
    DWORD           nMaxCard;
    LPCWSTR         lpstrTitle;
    DWORD           dwFlags;
    LPVOID          pvUserData;
    DWORD           dwShareMode;
    DWORD           dwPreferredProtocols;
    DWORD           dwActiveProtocol;
    LPOCNCONNPROCW  lpfnConnect;
    LPOCNCHKPROC    lpfnCheck;
    LPOCNDSCPROC    lpfnDisconnect;
    SCARDHANDLE     hCardHandle;
} OPENCARDNAMEW, *POPENCARDNAMEW, *LPOPENCARDNAMEW;
typedef OPENCARDNAMEA OPENCARDNAME;
typedef POPENCARDNAMEA POPENCARDNAME;
typedef LPOPENCARDNAMEA LPOPENCARDNAME;
extern  LONG
GetOpenCardNameA(
    LPOPENCARDNAMEA);
extern  LONG
GetOpenCardNameW(
    LPOPENCARDNAMEW);
extern  LONG
SCardDlgExtendedError (void);
extern  LONG
SCardReadCacheA(
     SCARDCONTEXT hContext,
     UUID *CardIdentifier,
     DWORD FreshnessCounter,
     LPSTR LookupName,
     PBYTE Data,
     DWORD *DataLen);
extern  LONG
SCardReadCacheW(
     SCARDCONTEXT hContext,
     UUID *CardIdentifier,
     DWORD FreshnessCounter,
     LPWSTR LookupName,
     PBYTE Data,
     DWORD *DataLen);
extern  LONG
SCardWriteCacheA(
     SCARDCONTEXT hContext,
     UUID *CardIdentifier,
     DWORD FreshnessCounter,
     LPSTR LookupName,
     PBYTE Data,
     DWORD DataLen);
extern  LONG
SCardWriteCacheW(
     SCARDCONTEXT hContext,
     UUID *CardIdentifier,
     DWORD FreshnessCounter,
     LPWSTR LookupName,
     PBYTE Data,
     DWORD DataLen);
struct _PSP;
typedef struct _PSP * HPROPSHEETPAGE;
struct _PROPSHEETPAGEA;
struct _PROPSHEETPAGEW;
typedef UINT ( *LPFNPSPCALLBACKA)(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEA *ppsp);
typedef UINT ( *LPFNPSPCALLBACKW)(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEW *ppsp);
typedef LPCDLGTEMPLATE PROPSHEETPAGE_RESOURCE;
typedef struct _PROPSHEETPAGEA_V1
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKA pfnCallback; UINT *pcRefParent;
} PROPSHEETPAGEA_V1, *LPPROPSHEETPAGEA_V1;
typedef const PROPSHEETPAGEA_V1 *LPCPROPSHEETPAGEA_V1;
typedef struct _PROPSHEETPAGEA_V2
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKA pfnCallback; UINT *pcRefParent;
    LPCSTR           pszHeaderTitle;
    LPCSTR           pszHeaderSubTitle;
} PROPSHEETPAGEA_V2, *LPPROPSHEETPAGEA_V2;
typedef const PROPSHEETPAGEA_V2 *LPCPROPSHEETPAGEA_V2;
typedef struct _PROPSHEETPAGEA_V3
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKA pfnCallback; UINT *pcRefParent;
    LPCSTR           pszHeaderTitle;
    LPCSTR           pszHeaderSubTitle;
    HANDLE           hActCtx;
} PROPSHEETPAGEA_V3, *LPPROPSHEETPAGEA_V3;
typedef const PROPSHEETPAGEA_V3 *LPCPROPSHEETPAGEA_V3;
typedef struct _PROPSHEETPAGEA
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKA pfnCallback; UINT *pcRefParent;
    LPCSTR           pszHeaderTitle;
    LPCSTR           pszHeaderSubTitle;
    HANDLE           hActCtx;
    union
    {
        HBITMAP     hbmHeader;
        LPCSTR      pszbmHeader;
    } ;
} PROPSHEETPAGEA_V4, *LPPROPSHEETPAGEA_V4;
typedef const PROPSHEETPAGEA_V4 *LPCPROPSHEETPAGEA_V4;
typedef struct _PROPSHEETPAGEW_V1
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCWSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKW pfnCallback; UINT *pcRefParent;
} PROPSHEETPAGEW_V1, *LPPROPSHEETPAGEW_V1;
typedef const PROPSHEETPAGEW_V1 *LPCPROPSHEETPAGEW_V1;
typedef struct _PROPSHEETPAGEW_V2
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCWSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKW pfnCallback; UINT *pcRefParent;
    LPCWSTR           pszHeaderTitle;
    LPCWSTR           pszHeaderSubTitle;
} PROPSHEETPAGEW_V2, *LPPROPSHEETPAGEW_V2;
typedef const PROPSHEETPAGEW_V2 *LPCPROPSHEETPAGEW_V2;
typedef struct _PROPSHEETPAGEW_V3
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCWSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKW pfnCallback; UINT *pcRefParent;
    LPCWSTR           pszHeaderTitle;
    LPCWSTR           pszHeaderSubTitle;
    HANDLE           hActCtx;
} PROPSHEETPAGEW_V3, *LPPROPSHEETPAGEW_V3;
typedef const PROPSHEETPAGEW_V3 *LPCPROPSHEETPAGEW_V3;
typedef struct _PROPSHEETPAGEW
{
    DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCWSTR pszTemplate; PROPSHEETPAGE_RESOURCE pResource; } ; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKW pfnCallback; UINT *pcRefParent;
    LPCWSTR           pszHeaderTitle;
    LPCWSTR           pszHeaderSubTitle;
    HANDLE            hActCtx;
    union
    {
        HBITMAP     hbmHeader;
        LPCWSTR     pszbmHeader;
    } ;
} PROPSHEETPAGEW_V4, *LPPROPSHEETPAGEW_V4;
typedef const PROPSHEETPAGEW_V4 *LPCPROPSHEETPAGEW_V4;
typedef    PROPSHEETPAGEA_V4    PROPSHEETPAGEA_LATEST;
typedef    PROPSHEETPAGEW_V4    PROPSHEETPAGEW_LATEST;
typedef  LPPROPSHEETPAGEA_V4  LPPROPSHEETPAGEA_LATEST;
typedef  LPPROPSHEETPAGEW_V4  LPPROPSHEETPAGEW_LATEST;
typedef LPCPROPSHEETPAGEA_V4 LPCPROPSHEETPAGEA_LATEST;
typedef LPCPROPSHEETPAGEW_V4 LPCPROPSHEETPAGEW_LATEST;
typedef    PROPSHEETPAGEA_V4    PROPSHEETPAGEA;
typedef    PROPSHEETPAGEW_V4    PROPSHEETPAGEW;
typedef  LPPROPSHEETPAGEA_V4  LPPROPSHEETPAGEA;
typedef  LPPROPSHEETPAGEW_V4  LPPROPSHEETPAGEW;
typedef LPCPROPSHEETPAGEA_V4 LPCPROPSHEETPAGEA;
typedef LPCPROPSHEETPAGEW_V4 LPCPROPSHEETPAGEW;
typedef int ( *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM);
typedef struct _PROPSHEETHEADERA_V1
{
    DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCSTR pStartPage; } ; union { LPCPROPSHEETPAGEA ppsp; HPROPSHEETPAGE *phpage; } ; PFNPROPSHEETCALLBACK pfnCallback;
} PROPSHEETHEADERA_V1, *LPPROPSHEETHEADERA_V1;
typedef const PROPSHEETHEADERA_V1 *LPCPROPSHEETHEADERA_V1;
typedef struct _PROPSHEETHEADERA_V2
{
    DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCSTR pszIcon; } ; LPCSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCSTR pStartPage; } ; union { LPCPROPSHEETPAGEA ppsp; HPROPSHEETPAGE *phpage; } ; PFNPROPSHEETCALLBACK pfnCallback;
    union
    {
        HBITMAP hbmWatermark;
        LPCSTR pszbmWatermark;
    } ;
    HPALETTE hplWatermark;
    union
    {
        HBITMAP hbmHeader;
        LPCSTR pszbmHeader;
    } ;
} PROPSHEETHEADERA_V2, *LPPROPSHEETHEADERA_V2;
typedef const PROPSHEETHEADERA_V2 *LPCPROPSHEETHEADERA_V2;
typedef struct _PROPSHEETHEADERW_V1
{
    DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCWSTR pStartPage; } ; union { LPCPROPSHEETPAGEW ppsp; HPROPSHEETPAGE *phpage; } ; PFNPROPSHEETCALLBACK pfnCallback;
} PROPSHEETHEADERW_V1, *LPPROPSHEETHEADERW_V1;
typedef const PROPSHEETHEADERW_V1 *LPCPROPSHEETHEADERW_V1;
typedef struct _PROPSHEETHEADERW_V2
{
    DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCWSTR pszIcon; } ; LPCWSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCWSTR pStartPage; } ; union { LPCPROPSHEETPAGEW ppsp; HPROPSHEETPAGE *phpage; } ; PFNPROPSHEETCALLBACK pfnCallback;
    union
    {
        HBITMAP hbmWatermark;
        LPCWSTR pszbmWatermark;
    } ;
    HPALETTE hplWatermark;
    union
    {
        HBITMAP hbmHeader;
        LPCWSTR pszbmHeader;
    } ;
} PROPSHEETHEADERW_V2, *LPPROPSHEETHEADERW_V2;
typedef const PROPSHEETHEADERW_V2 *LPCPROPSHEETHEADERW_V2;
typedef    PROPSHEETHEADERA_V2      PROPSHEETHEADERA;
typedef    PROPSHEETHEADERW_V2      PROPSHEETHEADERW;
typedef  LPPROPSHEETHEADERA_V2      LPPROPSHEETHEADERA;
typedef  LPPROPSHEETHEADERW_V2      LPPROPSHEETHEADERW;
typedef LPCPROPSHEETHEADERA_V2      LPCPROPSHEETHEADERA;
typedef LPCPROPSHEETHEADERW_V2      LPCPROPSHEETHEADERW;
 HPROPSHEETPAGE  CreatePropertySheetPageA(LPCPROPSHEETPAGEA constPropSheetPagePointer);
 HPROPSHEETPAGE  CreatePropertySheetPageW(LPCPROPSHEETPAGEW constPropSheetPagePointer);
 BOOL            DestroyPropertySheetPage(HPROPSHEETPAGE);
 INT_PTR         PropertySheetA(LPCPROPSHEETHEADERA);
 INT_PTR         PropertySheetW(LPCPROPSHEETHEADERW);
typedef BOOL ( *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
typedef BOOL ( *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);
typedef struct _PSHNOTIFY
{
    NMHDR hdr;
    LPARAM lParam;
} PSHNOTIFY, *LPPSHNOTIFY;
typedef struct _PRINTER_INFO_1A {
    DWORD   Flags;
    LPSTR   pDescription;
    LPSTR   pName;
    LPSTR   pComment;
} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
typedef struct _PRINTER_INFO_1W {
    DWORD   Flags;
    LPWSTR  pDescription;
    LPWSTR  pName;
    LPWSTR  pComment;
} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
typedef PRINTER_INFO_1A PRINTER_INFO_1;
typedef PPRINTER_INFO_1A PPRINTER_INFO_1;
typedef LPPRINTER_INFO_1A LPPRINTER_INFO_1;
typedef struct _PRINTER_INFO_2A {
    LPSTR     pServerName;
    LPSTR     pPrinterName;
    LPSTR     pShareName;
    LPSTR     pPortName;
    LPSTR     pDriverName;
    LPSTR     pComment;
    LPSTR     pLocation;
    LPDEVMODEA pDevMode;
    LPSTR     pSepFile;
    LPSTR     pPrintProcessor;
    LPSTR     pDatatype;
    LPSTR     pParameters;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD   Attributes;
    DWORD   Priority;
    DWORD   DefaultPriority;
    DWORD   StartTime;
    DWORD   UntilTime;
    DWORD   Status;
    DWORD   cJobs;
    DWORD   AveragePPM;
} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
typedef struct _PRINTER_INFO_2W {
    LPWSTR    pServerName;
    LPWSTR    pPrinterName;
    LPWSTR    pShareName;
    LPWSTR    pPortName;
    LPWSTR    pDriverName;
    LPWSTR    pComment;
    LPWSTR    pLocation;
    LPDEVMODEW pDevMode;
    LPWSTR    pSepFile;
    LPWSTR    pPrintProcessor;
    LPWSTR    pDatatype;
    LPWSTR    pParameters;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD   Attributes;
    DWORD   Priority;
    DWORD   DefaultPriority;
    DWORD   StartTime;
    DWORD   UntilTime;
    DWORD   Status;
    DWORD   cJobs;
    DWORD   AveragePPM;
} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
typedef PRINTER_INFO_2A PRINTER_INFO_2;
typedef PPRINTER_INFO_2A PPRINTER_INFO_2;
typedef LPPRINTER_INFO_2A LPPRINTER_INFO_2;
typedef struct _PRINTER_INFO_3 {
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
typedef struct _PRINTER_INFO_4A {
    LPSTR   pPrinterName;
    LPSTR   pServerName;
    DWORD   Attributes;
} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;
typedef struct _PRINTER_INFO_4W {
    LPWSTR  pPrinterName;
    LPWSTR  pServerName;
    DWORD   Attributes;
} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;
typedef PRINTER_INFO_4A PRINTER_INFO_4;
typedef PPRINTER_INFO_4A PPRINTER_INFO_4;
typedef LPPRINTER_INFO_4A LPPRINTER_INFO_4;
typedef struct _PRINTER_INFO_5A {
    LPSTR   pPrinterName;
    LPSTR   pPortName;
    DWORD   Attributes;
    DWORD   DeviceNotSelectedTimeout;
    DWORD   TransmissionRetryTimeout;
} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
typedef struct _PRINTER_INFO_5W {
    LPWSTR  pPrinterName;
    LPWSTR  pPortName;
    DWORD   Attributes;
    DWORD   DeviceNotSelectedTimeout;
    DWORD   TransmissionRetryTimeout;
} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
typedef PRINTER_INFO_5A PRINTER_INFO_5;
typedef PPRINTER_INFO_5A PPRINTER_INFO_5;
typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5;
typedef struct _PRINTER_INFO_6 {
    DWORD   dwStatus;
} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
typedef struct _PRINTER_INFO_7A {
  LPSTR    pszObjectGUID;
  DWORD    dwAction;
} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;
typedef struct _PRINTER_INFO_7W {
  LPWSTR   pszObjectGUID;
  DWORD    dwAction;
} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;
typedef PRINTER_INFO_7A PRINTER_INFO_7;
typedef PPRINTER_INFO_7A PPRINTER_INFO_7;
typedef LPPRINTER_INFO_7A LPPRINTER_INFO_7;
typedef struct _PRINTER_INFO_8A {
    LPDEVMODEA pDevMode;
} PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A;
typedef struct _PRINTER_INFO_8W {
    LPDEVMODEW pDevMode;
} PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W;
typedef PRINTER_INFO_8A PRINTER_INFO_8;
typedef PPRINTER_INFO_8A PPRINTER_INFO_8;
typedef LPPRINTER_INFO_8A LPPRINTER_INFO_8;
typedef struct _PRINTER_INFO_9A {
    LPDEVMODEA pDevMode;
} PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A;
typedef struct _PRINTER_INFO_9W {
    LPDEVMODEW pDevMode;
} PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W;
typedef PRINTER_INFO_9A PRINTER_INFO_9;
typedef PPRINTER_INFO_9A PPRINTER_INFO_9;
typedef LPPRINTER_INFO_9A LPPRINTER_INFO_9;
typedef struct _JOB_INFO_1A {
   DWORD    JobId;
   LPSTR      pPrinterName;
   LPSTR      pMachineName;
   LPSTR      pUserName;
   LPSTR      pDocument;
   LPSTR      pDatatype;
   LPSTR      pStatus;
   DWORD    Status;
   DWORD    Priority;
   DWORD    Position;
   DWORD    TotalPages;
   DWORD    PagesPrinted;
   SYSTEMTIME Submitted;
} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
typedef struct _JOB_INFO_1W {
   DWORD    JobId;
   LPWSTR     pPrinterName;
   LPWSTR     pMachineName;
   LPWSTR     pUserName;
   LPWSTR     pDocument;
   LPWSTR     pDatatype;
   LPWSTR     pStatus;
   DWORD    Status;
   DWORD    Priority;
   DWORD    Position;
   DWORD    TotalPages;
   DWORD    PagesPrinted;
   SYSTEMTIME Submitted;
} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
typedef JOB_INFO_1A JOB_INFO_1;
typedef PJOB_INFO_1A PJOB_INFO_1;
typedef LPJOB_INFO_1A LPJOB_INFO_1;
typedef struct _JOB_INFO_2A {
   DWORD    JobId;
   LPSTR      pPrinterName;
   LPSTR      pMachineName;
   LPSTR      pUserName;
   LPSTR      pDocument;
   LPSTR      pNotifyName;
   LPSTR      pDatatype;
   LPSTR      pPrintProcessor;
   LPSTR      pParameters;
   LPSTR      pDriverName;
   LPDEVMODEA pDevMode;
   LPSTR      pStatus;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
   DWORD    Status;
   DWORD    Priority;
   DWORD    Position;
   DWORD    StartTime;
   DWORD    UntilTime;
   DWORD    TotalPages;
   DWORD    Size;
   SYSTEMTIME Submitted;
   DWORD    Time;
   DWORD    PagesPrinted;
} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
typedef struct _JOB_INFO_2W {
   DWORD    JobId;
   LPWSTR     pPrinterName;
   LPWSTR     pMachineName;
   LPWSTR     pUserName;
   LPWSTR     pDocument;
   LPWSTR     pNotifyName;
   LPWSTR     pDatatype;
   LPWSTR     pPrintProcessor;
   LPWSTR     pParameters;
   LPWSTR     pDriverName;
   LPDEVMODEW pDevMode;
   LPWSTR     pStatus;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
   DWORD    Status;
   DWORD    Priority;
   DWORD    Position;
   DWORD    StartTime;
   DWORD    UntilTime;
   DWORD    TotalPages;
   DWORD    Size;
   SYSTEMTIME Submitted;
   DWORD    Time;
   DWORD    PagesPrinted;
} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
typedef JOB_INFO_2A JOB_INFO_2;
typedef PJOB_INFO_2A PJOB_INFO_2;
typedef LPJOB_INFO_2A LPJOB_INFO_2;
typedef struct _JOB_INFO_3 {
    DWORD   JobId;
    DWORD   NextJobId;
    DWORD   Reserved;
} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
typedef struct _JOB_INFO_4A {
   DWORD          JobId;
   LPSTR          pPrinterName;
   LPSTR          pMachineName;
   LPSTR          pUserName;
   LPSTR          pDocument;
   LPSTR          pNotifyName;
   LPSTR          pDatatype;
   LPSTR          pPrintProcessor;
   LPSTR          pParameters;
   LPSTR          pDriverName;
   LPDEVMODEA     pDevMode;
   LPSTR          pStatus;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
   DWORD          Status;
   DWORD          Priority;
   DWORD          Position;
   DWORD          StartTime;
   DWORD          UntilTime;
   DWORD          TotalPages;
   DWORD          Size;
   SYSTEMTIME     Submitted;
   DWORD          Time;
   DWORD          PagesPrinted;
   LONG           SizeHigh;
} JOB_INFO_4A, *PJOB_INFO_4A, *LPJOB_INFO_4A;
typedef struct _JOB_INFO_4W {
   DWORD          JobId;
   LPWSTR         pPrinterName;
   LPWSTR         pMachineName;
   LPWSTR         pUserName;
   LPWSTR         pDocument;
   LPWSTR         pNotifyName;
   LPWSTR         pDatatype;
   LPWSTR         pPrintProcessor;
   LPWSTR         pParameters;
   LPWSTR         pDriverName;
   LPDEVMODEW     pDevMode;
   LPWSTR         pStatus;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
   DWORD          Status;
   DWORD          Priority;
   DWORD          Position;
   DWORD          StartTime;
   DWORD          UntilTime;
   DWORD          TotalPages;
   DWORD          Size;
   SYSTEMTIME     Submitted;
   DWORD          Time;
   DWORD          PagesPrinted;
   LONG           SizeHigh;
} JOB_INFO_4W, *PJOB_INFO_4W, *LPJOB_INFO_4W;
typedef JOB_INFO_4A JOB_INFO_4;
typedef PJOB_INFO_4A PJOB_INFO_4;
typedef LPJOB_INFO_4A LPJOB_INFO_4;
typedef struct _ADDJOB_INFO_1A {
    LPSTR     Path;
    DWORD   JobId;
} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
typedef struct _ADDJOB_INFO_1W {
    LPWSTR    Path;
    DWORD   JobId;
} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
typedef ADDJOB_INFO_1A ADDJOB_INFO_1;
typedef PADDJOB_INFO_1A PADDJOB_INFO_1;
typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1;
typedef struct _DRIVER_INFO_1A {
    LPSTR     pName;
} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
typedef struct _DRIVER_INFO_1W {
    LPWSTR    pName;
} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
typedef DRIVER_INFO_1A DRIVER_INFO_1;
typedef PDRIVER_INFO_1A PDRIVER_INFO_1;
typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1;
typedef struct _DRIVER_INFO_2A {
    DWORD   cVersion;
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDriverPath;
    LPSTR     pDataFile;
    LPSTR     pConfigFile;
} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
typedef struct _DRIVER_INFO_2W {
    DWORD   cVersion;
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDriverPath;
    LPWSTR    pDataFile;
    LPWSTR    pConfigFile;
} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
typedef DRIVER_INFO_2A DRIVER_INFO_2;
typedef PDRIVER_INFO_2A PDRIVER_INFO_2;
typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2;
typedef struct _DRIVER_INFO_3A {
    DWORD   cVersion;
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDriverPath;
    LPSTR     pDataFile;
    LPSTR     pConfigFile;
    LPSTR     pHelpFile;
    LPSTR     pDependentFiles;
    LPSTR     pMonitorName;
    LPSTR     pDefaultDataType;
} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
typedef struct _DRIVER_INFO_3W {
    DWORD   cVersion;
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDriverPath;
    LPWSTR    pDataFile;
    LPWSTR    pConfigFile;
    LPWSTR    pHelpFile;
    LPWSTR    pDependentFiles;
    LPWSTR    pMonitorName;
    LPWSTR    pDefaultDataType;
} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
typedef DRIVER_INFO_3A DRIVER_INFO_3;
typedef PDRIVER_INFO_3A PDRIVER_INFO_3;
typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3;
typedef struct _DRIVER_INFO_4A {
    DWORD   cVersion;
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDriverPath;
    LPSTR     pDataFile;
    LPSTR     pConfigFile;
    LPSTR     pHelpFile;
    LPSTR     pDependentFiles;
    LPSTR     pMonitorName;
    LPSTR     pDefaultDataType;
    LPSTR     pszzPreviousNames;
} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A;
typedef struct _DRIVER_INFO_4W {
    DWORD   cVersion;
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDriverPath;
    LPWSTR    pDataFile;
    LPWSTR    pConfigFile;
    LPWSTR    pHelpFile;
    LPWSTR    pDependentFiles;
    LPWSTR    pMonitorName;
    LPWSTR    pDefaultDataType;
    LPWSTR    pszzPreviousNames;
} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W;
typedef DRIVER_INFO_4A DRIVER_INFO_4;
typedef PDRIVER_INFO_4A PDRIVER_INFO_4;
typedef LPDRIVER_INFO_4A LPDRIVER_INFO_4;
typedef struct _DRIVER_INFO_5A {
    DWORD   cVersion;
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDriverPath;
    LPSTR     pDataFile;
    LPSTR     pConfigFile;
    DWORD     dwDriverAttributes;
    DWORD     dwConfigVersion;
    DWORD     dwDriverVersion;
} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A;
typedef struct _DRIVER_INFO_5W {
    DWORD   cVersion;
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDriverPath;
    LPWSTR    pDataFile;
    LPWSTR    pConfigFile;
    DWORD     dwDriverAttributes;
    DWORD     dwConfigVersion;
    DWORD     dwDriverVersion;
} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W;
typedef DRIVER_INFO_5A DRIVER_INFO_5;
typedef PDRIVER_INFO_5A PDRIVER_INFO_5;
typedef LPDRIVER_INFO_5A LPDRIVER_INFO_5;
typedef struct _DRIVER_INFO_6A {
    DWORD     cVersion;
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDriverPath;
    LPSTR     pDataFile;
    LPSTR     pConfigFile;
    LPSTR     pHelpFile;
    LPSTR     pDependentFiles;
    LPSTR     pMonitorName;
    LPSTR     pDefaultDataType;
    LPSTR     pszzPreviousNames;
    FILETIME  ftDriverDate;
    DWORDLONG dwlDriverVersion;
    LPSTR      pszMfgName;
    LPSTR      pszOEMUrl;
    LPSTR      pszHardwareID;
    LPSTR      pszProvider;
} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A;
typedef struct _DRIVER_INFO_6W {
    DWORD     cVersion;
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDriverPath;
    LPWSTR    pDataFile;
    LPWSTR    pConfigFile;
    LPWSTR    pHelpFile;
    LPWSTR    pDependentFiles;
    LPWSTR    pMonitorName;
    LPWSTR    pDefaultDataType;
    LPWSTR    pszzPreviousNames;
    FILETIME  ftDriverDate;
    DWORDLONG dwlDriverVersion;
    LPWSTR     pszMfgName;
    LPWSTR     pszOEMUrl;
    LPWSTR     pszHardwareID;
    LPWSTR     pszProvider;
} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W;
typedef DRIVER_INFO_6A DRIVER_INFO_6;
typedef PDRIVER_INFO_6A PDRIVER_INFO_6;
typedef LPDRIVER_INFO_6A LPDRIVER_INFO_6;
typedef struct _DRIVER_INFO_8A {
    DWORD      cVersion;
    LPSTR      pName;
    LPSTR      pEnvironment;
    LPSTR      pDriverPath;
    LPSTR      pDataFile;
    LPSTR      pConfigFile;
    LPSTR      pHelpFile;
    LPSTR      pDependentFiles;
    LPSTR      pMonitorName;
    LPSTR      pDefaultDataType;
    LPSTR      pszzPreviousNames;
    FILETIME   ftDriverDate;
    DWORDLONG  dwlDriverVersion;
    LPSTR      pszMfgName;
    LPSTR      pszOEMUrl;
    LPSTR      pszHardwareID;
    LPSTR      pszProvider;
    LPSTR      pszPrintProcessor;
    LPSTR      pszVendorSetup;
    LPSTR      pszzColorProfiles;
    LPSTR      pszInfPath;
    DWORD      dwPrinterDriverAttributes;
    LPSTR      pszzCoreDriverDependencies;
    FILETIME   ftMinInboxDriverVerDate;
    DWORDLONG  dwlMinInboxDriverVerVersion;
} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
typedef struct _DRIVER_INFO_8W {
    DWORD      cVersion;
    LPWSTR     pName;
    LPWSTR     pEnvironment;
    LPWSTR     pDriverPath;
    LPWSTR     pDataFile;
    LPWSTR     pConfigFile;
    LPWSTR     pHelpFile;
    LPWSTR     pDependentFiles;
    LPWSTR     pMonitorName;
    LPWSTR     pDefaultDataType;
    LPWSTR     pszzPreviousNames;
    FILETIME   ftDriverDate;
    DWORDLONG  dwlDriverVersion;
    LPWSTR     pszMfgName;
    LPWSTR     pszOEMUrl;
    LPWSTR     pszHardwareID;
    LPWSTR     pszProvider;
    LPWSTR     pszPrintProcessor;
    LPWSTR     pszVendorSetup;
    LPWSTR     pszzColorProfiles;
    LPWSTR     pszInfPath;
    DWORD      dwPrinterDriverAttributes;
    LPWSTR     pszzCoreDriverDependencies;
    FILETIME   ftMinInboxDriverVerDate;
    DWORDLONG  dwlMinInboxDriverVerVersion;
} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
typedef DRIVER_INFO_8A DRIVER_INFO_8;
typedef PDRIVER_INFO_8A PDRIVER_INFO_8;
typedef LPDRIVER_INFO_8A LPDRIVER_INFO_8;
typedef struct _DOC_INFO_1A {
    LPSTR     pDocName;
    LPSTR     pOutputFile;
    LPSTR     pDatatype;
} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
typedef struct _DOC_INFO_1W {
    LPWSTR    pDocName;
    LPWSTR    pOutputFile;
    LPWSTR    pDatatype;
} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
typedef DOC_INFO_1A DOC_INFO_1;
typedef PDOC_INFO_1A PDOC_INFO_1;
typedef LPDOC_INFO_1A LPDOC_INFO_1;
typedef struct _FORM_INFO_1A {
    DWORD   Flags;
    LPSTR     pName;
    SIZEL   Size;
    RECTL   ImageableArea;
} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
typedef struct _FORM_INFO_1W {
    DWORD   Flags;
    LPWSTR    pName;
    SIZEL   Size;
    RECTL   ImageableArea;
} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
typedef FORM_INFO_1A FORM_INFO_1;
typedef PFORM_INFO_1A PFORM_INFO_1;
typedef LPFORM_INFO_1A LPFORM_INFO_1;
    typedef struct _FORM_INFO_2A {
        DWORD           Flags;
        LPCSTR          pName;
        SIZEL           Size;
        RECTL           ImageableArea;
        LPCSTR          pKeyword;
        DWORD           StringType;
        LPCSTR          pMuiDll;
        DWORD           dwResourceId;
        LPCSTR          pDisplayName;
        LANGID          wLangId;
    } FORM_INFO_2A, *PFORM_INFO_2A, *LPFORM_INFO_2A;
    typedef struct _FORM_INFO_2W {
        DWORD           Flags;
        LPCWSTR         pName;
        SIZEL           Size;
        RECTL           ImageableArea;
        LPCSTR          pKeyword;
        DWORD           StringType;
        LPCWSTR         pMuiDll;
        DWORD           dwResourceId;
        LPCWSTR         pDisplayName;
        LANGID          wLangId;
    } FORM_INFO_2W, *PFORM_INFO_2W, *LPFORM_INFO_2W;
typedef FORM_INFO_2A FORM_INFO_2;
typedef PFORM_INFO_2A PFORM_INFO_2;
typedef LPFORM_INFO_2A LPFORM_INFO_2;
typedef struct _DOC_INFO_2A {
    LPSTR     pDocName;
    LPSTR     pOutputFile;
    LPSTR     pDatatype;
    DWORD   dwMode;
    DWORD   JobId;
} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
typedef struct _DOC_INFO_2W {
    LPWSTR    pDocName;
    LPWSTR    pOutputFile;
    LPWSTR    pDatatype;
    DWORD   dwMode;
    DWORD   JobId;
} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
typedef DOC_INFO_2A DOC_INFO_2;
typedef PDOC_INFO_2A PDOC_INFO_2;
typedef LPDOC_INFO_2A LPDOC_INFO_2;
typedef struct _DOC_INFO_3A {
    LPSTR     pDocName;
    LPSTR     pOutputFile;
    LPSTR     pDatatype;
    DWORD     dwFlags;
} DOC_INFO_3A, *PDOC_INFO_3A, *LPDOC_INFO_3A;
typedef struct _DOC_INFO_3W {
    LPWSTR    pDocName;
    LPWSTR    pOutputFile;
    LPWSTR    pDatatype;
    DWORD     dwFlags;
} DOC_INFO_3W, *PDOC_INFO_3W, *LPDOC_INFO_3W;
typedef DOC_INFO_3A DOC_INFO_3;
typedef PDOC_INFO_3A PDOC_INFO_3;
typedef LPDOC_INFO_3A LPDOC_INFO_3;
typedef struct _PRINTPROCESSOR_INFO_1A {
    LPSTR     pName;
} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;
typedef struct _PRINTPROCESSOR_INFO_1W {
    LPWSTR    pName;
} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;
typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1;
typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1;
typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1;
    typedef struct _PRINTPROCESSOR_CAPS_1 {
        DWORD     dwLevel;
        DWORD     dwNupOptions;
        DWORD     dwPageOrderFlags;
        DWORD     dwNumberOfCopies;
    } PRINTPROCESSOR_CAPS_1, *PPRINTPROCESSOR_CAPS_1;
    typedef struct _PRINTPROCESSOR_CAPS_2 {
        DWORD     dwLevel;
        DWORD     dwNupOptions;
        DWORD     dwPageOrderFlags;
        DWORD     dwNumberOfCopies;
        DWORD     dwDuplexHandlingCaps;
        DWORD     dwNupDirectionCaps;
        DWORD     dwNupBorderCaps;
        DWORD     dwBookletHandlingCaps;
        DWORD     dwScalingCaps;
    } PRINTPROCESSOR_CAPS_2, *PPRINTPROCESSOR_CAPS_2;
typedef struct _PORT_INFO_1A {
    LPSTR     pName;
} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
typedef struct _PORT_INFO_1W {
    LPWSTR    pName;
} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
typedef PORT_INFO_1A PORT_INFO_1;
typedef PPORT_INFO_1A PPORT_INFO_1;
typedef LPPORT_INFO_1A LPPORT_INFO_1;
typedef struct _PORT_INFO_2A {
    LPSTR     pPortName;
    LPSTR     pMonitorName;
    LPSTR     pDescription;
    DWORD     fPortType;
    DWORD     Reserved;
} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
typedef struct _PORT_INFO_2W {
    LPWSTR    pPortName;
    LPWSTR    pMonitorName;
    LPWSTR    pDescription;
    DWORD     fPortType;
    DWORD     Reserved;
} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
typedef PORT_INFO_2A PORT_INFO_2;
typedef PPORT_INFO_2A PPORT_INFO_2;
typedef LPPORT_INFO_2A LPPORT_INFO_2;
typedef struct _PORT_INFO_3A {
    DWORD   dwStatus;
    LPSTR   pszStatus;
    DWORD   dwSeverity;
} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
typedef struct _PORT_INFO_3W {
    DWORD   dwStatus;
    LPWSTR  pszStatus;
    DWORD   dwSeverity;
} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
typedef PORT_INFO_3A PORT_INFO_3;
typedef PPORT_INFO_3A PPORT_INFO_3;
typedef LPPORT_INFO_3A LPPORT_INFO_3;
typedef struct _MONITOR_INFO_1A{
    LPSTR     pName;
} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
typedef struct _MONITOR_INFO_1W{
    LPWSTR    pName;
} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
typedef MONITOR_INFO_1A MONITOR_INFO_1;
typedef PMONITOR_INFO_1A PMONITOR_INFO_1;
typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1;
typedef struct _MONITOR_INFO_2A{
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDLLName;
} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
typedef struct _MONITOR_INFO_2W{
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDLLName;
} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
typedef MONITOR_INFO_2A MONITOR_INFO_2;
typedef PMONITOR_INFO_2A PMONITOR_INFO_2;
typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2;
typedef struct _DATATYPES_INFO_1A{
    LPSTR     pName;
} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
typedef struct _DATATYPES_INFO_1W{
    LPWSTR    pName;
} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
typedef DATATYPES_INFO_1A DATATYPES_INFO_1;
typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1;
typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1;
typedef struct _PRINTER_DEFAULTSA{
    LPSTR         pDatatype;
    LPDEVMODEA pDevMode;
    ACCESS_MASK DesiredAccess;
} PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
typedef struct _PRINTER_DEFAULTSW{
    LPWSTR        pDatatype;
    LPDEVMODEW pDevMode;
    ACCESS_MASK DesiredAccess;
} PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS;
typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS;
typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS;
typedef struct _PRINTER_ENUM_VALUESA {
    LPSTR   pValueName;
    DWORD   cbValueName;
    DWORD   dwType;
    LPBYTE  pData;
    DWORD   cbData;
} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA, *LPPRINTER_ENUM_VALUESA;
typedef struct _PRINTER_ENUM_VALUESW {
    LPWSTR  pValueName;
    DWORD   cbValueName;
    DWORD   dwType;
    LPBYTE  pData;
    DWORD   cbData;
} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW, *LPPRINTER_ENUM_VALUESW;
typedef PRINTER_ENUM_VALUESA PRINTER_ENUM_VALUES;
typedef PPRINTER_ENUM_VALUESA PPRINTER_ENUM_VALUES;
typedef LPPRINTER_ENUM_VALUESA LPPRINTER_ENUM_VALUES;
BOOL

EnumPrintersA(
          DWORD   Flags,
      LPSTR Name,
              DWORD   Level,
              LPBYTE  pPrinterEnum,
              DWORD   cbBuf,
         LPDWORD pcbNeeded,
         LPDWORD pcReturned
);
BOOL

EnumPrintersW(
          DWORD   Flags,
      LPWSTR Name,
              DWORD   Level,
              LPBYTE  pPrinterEnum,
              DWORD   cbBuf,
         LPDWORD pcbNeeded,
         LPDWORD pcReturned
);
BOOL

OpenPrinterA(
    LPSTR             pPrinterName,
       LPHANDLE            phPrinter,
    LPPRINTER_DEFAULTSA pDefault
);
BOOL

OpenPrinterW(
    LPWSTR             pPrinterName,
       LPHANDLE            phPrinter,
    LPPRINTER_DEFAULTSW pDefault
);
BOOL

ResetPrinterA(
        HANDLE                hPrinter,
    LPPRINTER_DEFAULTSA   pDefault
);
BOOL

ResetPrinterW(
        HANDLE                hPrinter,
    LPPRINTER_DEFAULTSW   pDefault
);
BOOL

SetJobA(
        HANDLE  hPrinter,
            DWORD   JobId,
            DWORD   Level,
    LPBYTE  pJob,
            DWORD   Command
);
BOOL

SetJobW(
        HANDLE  hPrinter,
            DWORD   JobId,
            DWORD   Level,
    LPBYTE  pJob,
            DWORD   Command
);
BOOL

GetJobA(
  HANDLE   hPrinter,
      DWORD    JobId,
      DWORD    Level,
      LPBYTE   pJob,
      DWORD    cbBuf,
 LPDWORD  pcbNeeded
);
BOOL

GetJobW(
  HANDLE   hPrinter,
      DWORD    JobId,
      DWORD    Level,
      LPBYTE   pJob,
      DWORD    cbBuf,
 LPDWORD  pcbNeeded
);
BOOL

EnumJobsA(
  HANDLE  hPrinter,
      DWORD   FirstJob,
      DWORD   NoJobs,
      DWORD   Level,
      LPBYTE  pJob,
      DWORD   cbBuf,
 LPDWORD pcbNeeded,
 LPDWORD pcReturned
);
BOOL

EnumJobsW(
  HANDLE  hPrinter,
      DWORD   FirstJob,
      DWORD   NoJobs,
      DWORD   Level,
      LPBYTE  pJob,
      DWORD   cbBuf,
 LPDWORD pcbNeeded,
 LPDWORD pcReturned
);
HANDLE

AddPrinterA(
    LPSTR    pName,
            DWORD      Level,
        LPBYTE     pPrinter
);
HANDLE

AddPrinterW(
    LPWSTR    pName,
            DWORD      Level,
        LPBYTE     pPrinter
);
BOOL

DeletePrinter(
 HANDLE   hPrinter
);
BOOL

SetPrinterA(
     HANDLE  hPrinter,
         DWORD   Level,
 LPBYTE  pPrinter,
         DWORD   Command
);
BOOL

SetPrinterW(
     HANDLE  hPrinter,
         DWORD   Level,
 LPBYTE  pPrinter,
         DWORD   Command
);
BOOL

GetPrinterA(
  HANDLE  hPrinter,
      DWORD   Level,
      LPBYTE  pPrinter,
      DWORD   cbBuf,
 LPDWORD pcbNeeded
);
BOOL

GetPrinterW(
  HANDLE  hPrinter,
      DWORD   Level,
      LPBYTE  pPrinter,
      DWORD   cbBuf,
 LPDWORD pcbNeeded
);
BOOL

AddPrinterDriverA(
    LPSTR   pName,
            DWORD     Level,
        LPBYTE    pDriverInfo
);
BOOL

AddPrinterDriverW(
    LPWSTR   pName,
            DWORD     Level,
        LPBYTE    pDriverInfo
);
BOOL

AddPrinterDriverExA(
    LPSTR   pName,
            DWORD     Level,
        LPBYTE      pDriverInfo,
            DWORD     dwFileCopyFlags
);
BOOL

AddPrinterDriverExW(
    LPWSTR   pName,
            DWORD     Level,
        LPBYTE      pDriverInfo,
            DWORD     dwFileCopyFlags
);
BOOL

EnumPrinterDriversA(
    LPSTR        pName,
    LPSTR        pEnvironment,
            DWORD          Level,
            LPBYTE        pDriverInfo,
            DWORD          cbBuf,
       LPDWORD        pcbNeeded,
       LPDWORD        pcReturned
);
BOOL

EnumPrinterDriversW(
    LPWSTR        pName,
    LPWSTR        pEnvironment,
            DWORD          Level,
            LPBYTE        pDriverInfo,
            DWORD          cbBuf,
       LPDWORD        pcbNeeded,
       LPDWORD        pcReturned
);
BOOL

GetPrinterDriverA(
        HANDLE  hPrinter,
    LPSTR pEnvironment,
            DWORD   Level,
            LPBYTE  pDriverInfo,
            DWORD   cbBuf,
       LPDWORD pcbNeeded
);
BOOL

GetPrinterDriverW(
        HANDLE  hPrinter,
    LPWSTR pEnvironment,
            DWORD   Level,
            LPBYTE  pDriverInfo,
            DWORD   cbBuf,
       LPDWORD pcbNeeded
);
BOOL

GetPrinterDriverDirectoryA(
    LPSTR   pName,
    LPSTR   pEnvironment,
            DWORD     Level,
            LPBYTE    pDriverDirectory,
            DWORD     cbBuf,
       LPDWORD   pcbNeeded
);
BOOL

GetPrinterDriverDirectoryW(
    LPWSTR   pName,
    LPWSTR   pEnvironment,
            DWORD     Level,
            LPBYTE    pDriverDirectory,
            DWORD     cbBuf,
       LPDWORD   pcbNeeded
);
BOOL

DeletePrinterDriverA(
    LPSTR    pName,
    LPSTR    pEnvironment,
        LPSTR    pDriverName
);
BOOL

DeletePrinterDriverW(
    LPWSTR    pName,
    LPWSTR    pEnvironment,
        LPWSTR    pDriverName
);
BOOL

DeletePrinterDriverExA(
    LPSTR    pName,
    LPSTR    pEnvironment,
        LPSTR    pDriverName,
            DWORD      dwDeleteFlag,
            DWORD      dwVersionFlag
);
BOOL

DeletePrinterDriverExW(
    LPWSTR    pName,
    LPWSTR    pEnvironment,
        LPWSTR    pDriverName,
            DWORD      dwDeleteFlag,
            DWORD      dwVersionFlag
);
BOOL

AddPrintProcessorA(
   LPSTR   pName,
   LPSTR   pEnvironment,
       LPSTR   pPathName,
       LPSTR   pPrintProcessorName
);
BOOL

AddPrintProcessorW(
   LPWSTR   pName,
   LPWSTR   pEnvironment,
       LPWSTR   pPathName,
       LPWSTR   pPrintProcessorName
);
BOOL

EnumPrintProcessorsA(
   LPSTR   pName,
   LPSTR   pEnvironment,
           DWORD     Level,
           LPBYTE    pPrintProcessorInfo,
           DWORD     cbBuf,
      LPDWORD   pcbNeeded,
      LPDWORD   pcReturned
);
BOOL

EnumPrintProcessorsW(
   LPWSTR   pName,
   LPWSTR   pEnvironment,
           DWORD     Level,
           LPBYTE    pPrintProcessorInfo,
           DWORD     cbBuf,
      LPDWORD   pcbNeeded,
      LPDWORD   pcReturned
);
BOOL

GetPrintProcessorDirectoryA(
   LPSTR    pName,
   LPSTR    pEnvironment,
           DWORD      Level,
           LPBYTE     pPrintProcessorInfo,
           DWORD      cbBuf,
      LPDWORD    pcbNeeded
);
BOOL

GetPrintProcessorDirectoryW(
   LPWSTR    pName,
   LPWSTR    pEnvironment,
           DWORD      Level,
           LPBYTE     pPrintProcessorInfo,
           DWORD      cbBuf,
      LPDWORD    pcbNeeded
);
BOOL

EnumPrintProcessorDatatypesA(
    LPSTR   pName,
        LPSTR   pPrintProcessorName,
            DWORD     Level,
            LPBYTE    pDatatypes,
            DWORD     cbBuf,
       LPDWORD   pcbNeeded,
       LPDWORD   pcReturned
);
BOOL

EnumPrintProcessorDatatypesW(
    LPWSTR   pName,
        LPWSTR   pPrintProcessorName,
            DWORD     Level,
            LPBYTE    pDatatypes,
            DWORD     cbBuf,
       LPDWORD   pcbNeeded,
       LPDWORD   pcReturned
);
BOOL

DeletePrintProcessorA(
    LPSTR   pName,
    LPSTR   pEnvironment,
        LPSTR   pPrintProcessorName
);
BOOL

DeletePrintProcessorW(
    LPWSTR   pName,
    LPWSTR   pEnvironment,
        LPWSTR   pPrintProcessorName
);
DWORD

StartDocPrinterA(
    HANDLE  hPrinter,
        DWORD   Level,
    LPBYTE  pDocInfo
);
DWORD

StartDocPrinterW(
    HANDLE  hPrinter,
        DWORD   Level,
    LPBYTE  pDocInfo
);
BOOL

StartPagePrinter(
    HANDLE  hPrinter
);
BOOL

WritePrinter(
    HANDLE  hPrinter,
        LPVOID  pBuf,
        DWORD   cbBuf,
   LPDWORD pcWritten
);
BOOL

FlushPrinter(
    HANDLE  hPrinter,
        LPVOID  pBuf,
        DWORD   cbBuf,
   LPDWORD pcWritten,
        DWORD   cSleep
);
BOOL

EndPagePrinter(
    HANDLE   hPrinter
);
BOOL

AbortPrinter(
    HANDLE   hPrinter
);
BOOL

ReadPrinter(
    HANDLE  hPrinter,
        LPVOID  pBuf,
        DWORD   cbBuf,
   LPDWORD pNoBytesRead
);
BOOL

EndDocPrinter(
    HANDLE   hPrinter
);
BOOL

AddJobA(
    HANDLE  hPrinter,
        DWORD   Level,
        LPBYTE  pData,
        DWORD   cbBuf,
   LPDWORD pcbNeeded
);
BOOL

AddJobW(
    HANDLE  hPrinter,
        DWORD   Level,
        LPBYTE  pData,
        DWORD   cbBuf,
   LPDWORD pcbNeeded
);
BOOL

ScheduleJob(
    HANDLE  hPrinter,
        DWORD   JobId
);
BOOL

PrinterProperties(
    HWND    hWnd,
    HANDLE  hPrinter
);
LONG

DocumentPropertiesA(
        HWND      hWnd,
            HANDLE    hPrinter,
            LPSTR   pDeviceName,
       PDEVMODEA pDevModeOutput,
        PDEVMODEA pDevModeInput,
                DWORD     fMode
);
LONG

DocumentPropertiesW(
        HWND      hWnd,
            HANDLE    hPrinter,
            LPWSTR   pDeviceName,
       PDEVMODEW pDevModeOutput,
        PDEVMODEW pDevModeInput,
                DWORD     fMode
);
LONG

AdvancedDocumentPropertiesA(
            HWND        hWnd,
            HANDLE      hPrinter,
            LPSTR     pDeviceName,
     PDEVMODEA   pDevModeOutput,
        PDEVMODEA   pDevModeInput
);
LONG

AdvancedDocumentPropertiesW(
            HWND        hWnd,
            HANDLE      hPrinter,
            LPWSTR     pDeviceName,
     PDEVMODEW   pDevModeOutput,
        PDEVMODEW   pDevModeInput
);
    LONG
    ExtDeviceMode(
                HWND        hWnd,
                HANDLE      hInst,
         LPDEVMODEA  pDevModeOutput,
            LPSTR       pDeviceName,
            LPSTR       pPort,
            LPDEVMODEA  pDevModeInput,
            LPSTR       pProfile,
                    DWORD       fMode
    );
DWORD

GetPrinterDataA(
         HANDLE   hPrinter,
         LPSTR  pValueName,
    LPDWORD  pType,
             LPBYTE   pData,
             DWORD    nSize,
        LPDWORD  pcbNeeded
);
DWORD

GetPrinterDataW(
         HANDLE   hPrinter,
         LPWSTR  pValueName,
    LPDWORD  pType,
             LPBYTE   pData,
             DWORD    nSize,
        LPDWORD  pcbNeeded
);
DWORD

GetPrinterDataExA(
         HANDLE   hPrinter,
         LPCSTR pKeyName,
         LPCSTR pValueName,
    LPDWORD  pType,
             LPBYTE   pData,
             DWORD    nSize,
        LPDWORD  pcbNeeded
);
DWORD

GetPrinterDataExW(
         HANDLE   hPrinter,
         LPCWSTR pKeyName,
         LPCWSTR pValueName,
    LPDWORD  pType,
             LPBYTE   pData,
             DWORD    nSize,
        LPDWORD  pcbNeeded
);
DWORD

EnumPrinterDataA(
        HANDLE   hPrinter,
            DWORD    dwIndex,
            LPSTR  pValueName,
            DWORD    cbValueName,
       LPDWORD  pcbValueName,
   LPDWORD  pType,
            LPBYTE   pData,
            DWORD    cbData,
   LPDWORD  pcbData
);
DWORD

EnumPrinterDataW(
        HANDLE   hPrinter,
            DWORD    dwIndex,
            LPWSTR  pValueName,
            DWORD    cbValueName,
       LPDWORD  pcbValueName,
   LPDWORD  pType,
            LPBYTE   pData,
            DWORD    cbData,
   LPDWORD  pcbData
);
DWORD

EnumPrinterDataExA(
    HANDLE    hPrinter,
    LPCSTR  pKeyName,
        LPBYTE    pEnumValues,
        DWORD     cbEnumValues,
   LPDWORD   pcbEnumValues,
   LPDWORD   pnEnumValues
);
DWORD

EnumPrinterDataExW(
    HANDLE    hPrinter,
    LPCWSTR  pKeyName,
        LPBYTE    pEnumValues,
        DWORD     cbEnumValues,
   LPDWORD   pcbEnumValues,
   LPDWORD   pnEnumValues
);
DWORD

EnumPrinterKeyA(
    HANDLE   hPrinter,
    LPCSTR pKeyName,
        LPSTR  pSubkey,
        DWORD    cbSubkey,
   LPDWORD  pcbSubkey
);
DWORD

EnumPrinterKeyW(
    HANDLE   hPrinter,
    LPCWSTR pKeyName,
        LPWSTR  pSubkey,
        DWORD    cbSubkey,
   LPDWORD  pcbSubkey
);
DWORD

SetPrinterDataA(
    HANDLE  hPrinter,
    LPSTR pValueName,
        DWORD   Type,
        LPBYTE  pData,
        DWORD   cbData
);
DWORD

SetPrinterDataW(
    HANDLE  hPrinter,
    LPWSTR pValueName,
        DWORD   Type,
        LPBYTE  pData,
        DWORD   cbData
);
DWORD

SetPrinterDataExA(
    HANDLE   hPrinter,
    LPCSTR pKeyName,
    LPCSTR pValueName,
        DWORD    Type,
        LPBYTE   pData,
        DWORD    cbData
);
DWORD

SetPrinterDataExW(
    HANDLE   hPrinter,
    LPCWSTR pKeyName,
    LPCWSTR pValueName,
        DWORD    Type,
        LPBYTE   pData,
        DWORD    cbData
);
DWORD

DeletePrinterDataA(
    HANDLE  hPrinter,
    LPSTR pValueName
);
DWORD

DeletePrinterDataW(
    HANDLE  hPrinter,
    LPWSTR pValueName
);
DWORD

DeletePrinterDataExA(
    HANDLE   hPrinter,
    LPCSTR pKeyName,
    LPCSTR pValueName
);
DWORD

DeletePrinterDataExW(
    HANDLE   hPrinter,
    LPCWSTR pKeyName,
    LPCWSTR pValueName
);
DWORD

DeletePrinterKeyA(
    HANDLE   hPrinter,
    LPCSTR pKeyName
);
DWORD

DeletePrinterKeyW(
    HANDLE   hPrinter,
    LPCWSTR pKeyName
);
typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
    WORD Type;
    WORD Reserved0;
    DWORD Reserved1;
    DWORD Reserved2;
    DWORD Count;
    PWORD pFields;
} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE;
typedef struct _PRINTER_NOTIFY_OPTIONS {
    DWORD Version;
    DWORD Flags;
    DWORD Count;
    PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
typedef struct _PRINTER_NOTIFY_INFO_DATA {
    WORD Type;
    WORD Field;
    DWORD Reserved;
    DWORD Id;
    union {
        DWORD adwData[2];
        struct {
            DWORD  cbBuf;
            LPVOID pBuf;
        } Data;
    } NotifyData;
} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA;
typedef struct _PRINTER_NOTIFY_INFO {
    DWORD Version;
    DWORD Flags;
    DWORD Count;
    PRINTER_NOTIFY_INFO_DATA aData[1];
} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
    typedef struct _BINARY_CONTAINER{
        DWORD cbBuf;
        LPBYTE pData;
    } BINARY_CONTAINER, *PBINARY_CONTAINER;
    typedef struct _BIDI_DATA{
        DWORD dwBidiType;
        union {
            BOOL   bData;
            LONG   iData;
            LPWSTR sData;
            FLOAT  fData;
            BINARY_CONTAINER biData;
            }u;
    } BIDI_DATA, *PBIDI_DATA, *LPBIDI_DATA;
    typedef struct _BIDI_REQUEST_DATA{
        DWORD     dwReqNumber;
        LPWSTR    pSchema;
        BIDI_DATA data;
    } BIDI_REQUEST_DATA , *PBIDI_REQUEST_DATA , *LPBIDI_REQUEST_DATA;
    typedef struct _BIDI_REQUEST_CONTAINER{
        DWORD Version;
        DWORD Flags;
        DWORD Count;
        BIDI_REQUEST_DATA aData[ 1 ];
    }BIDI_REQUEST_CONTAINER, *PBIDI_REQUEST_CONTAINER, *LPBIDI_REQUEST_CONTAINER;
    typedef struct _BIDI_RESPONSE_DATA{
        DWORD  dwResult;
        DWORD  dwReqNumber;
        LPWSTR pSchema;
        BIDI_DATA data;
    } BIDI_RESPONSE_DATA, *PBIDI_RESPONSE_DATA, *LPBIDI_RESPONSE_DATA;
    typedef struct _BIDI_RESPONSE_CONTAINER{
        DWORD Version;
        DWORD Flags;
        DWORD Count;
        BIDI_RESPONSE_DATA aData[ 1 ];
    } BIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER;
    typedef enum {
        BIDI_NULL   = 0,
        BIDI_INT    = 1,
        BIDI_FLOAT  = 2,
        BIDI_BOOL   = 3,
        BIDI_STRING = 4,
        BIDI_TEXT   = 5,
        BIDI_ENUM   = 6,
        BIDI_BLOB   = 7
    } BIDI_TYPE;
DWORD

WaitForPrinterChange(
 HANDLE  hPrinter,
     DWORD   Flags
);
HANDLE

FindFirstPrinterChangeNotification(
     HANDLE hPrinter,
         DWORD  fdwFilter,
         DWORD  fdwOptions,
 PVOID  pPrinterNotifyOptions
    );
BOOL

FindNextPrinterChangeNotification(
        HANDLE hChange,
   PDWORD pdwChange,
    LPVOID pvReserved,
   LPVOID *ppPrinterNotifyInfo
    );
BOOL

FreePrinterNotifyInfo(
   PPRINTER_NOTIFY_INFO pPrinterNotifyInfo
    );
BOOL

FindClosePrinterChangeNotification(
   HANDLE hChange
    );
DWORD

PrinterMessageBoxA(
   HANDLE    hPrinter,
       DWORD     Error,
   HWND      hWnd,
   LPSTR   pText,
   LPSTR   pCaption,
       DWORD     dwType
);
DWORD

PrinterMessageBoxW(
   HANDLE    hPrinter,
       DWORD     Error,
   HWND      hWnd,
   LPWSTR   pText,
   LPWSTR   pCaption,
       DWORD     dwType
);
BOOL

ClosePrinter(
 HANDLE hPrinter
);
BOOL

AddFormA(
    HANDLE  hPrinter,
        DWORD   Level,
    LPBYTE  pForm
);
BOOL

AddFormW(
    HANDLE  hPrinter,
        DWORD   Level,
    LPBYTE  pForm
);
BOOL

DeleteFormA(
    HANDLE    hPrinter,
    LPSTR   pFormName
);
BOOL

DeleteFormW(
    HANDLE    hPrinter,
    LPWSTR   pFormName
);
BOOL

GetFormA(
    HANDLE        hPrinter,
    LPSTR       pFormName,
        DWORD         Level,
        LPBYTE        pForm,
        DWORD         cbBuf,
   LPDWORD       pcbNeeded
);
BOOL

GetFormW(
    HANDLE        hPrinter,
    LPWSTR       pFormName,
        DWORD         Level,
        LPBYTE        pForm,
        DWORD         cbBuf,
   LPDWORD       pcbNeeded
);
BOOL

SetFormA(
    HANDLE  hPrinter,
    LPSTR pFormName,
        DWORD   Level,
    LPBYTE  pForm
);
BOOL

SetFormW(
    HANDLE  hPrinter,
    LPWSTR pFormName,
        DWORD   Level,
    LPBYTE  pForm
);
BOOL

EnumFormsA(
    HANDLE  hPrinter,
        DWORD   Level,
        LPBYTE  pForm,
        DWORD   cbBuf,
   LPDWORD pcbNeeded,
   LPDWORD pcReturned
);
BOOL

EnumFormsW(
    HANDLE  hPrinter,
        DWORD   Level,
        LPBYTE  pForm,
        DWORD   cbBuf,
   LPDWORD pcbNeeded,
   LPDWORD pcReturned
);
BOOL

EnumMonitorsA(
    LPSTR   pName,
            DWORD       Level,
            LPBYTE      pMonitor,
            DWORD       cbBuf,
       LPDWORD    pcbNeeded,
       LPDWORD    pcReturned
);
BOOL

EnumMonitorsW(
    LPWSTR   pName,
            DWORD       Level,
            LPBYTE      pMonitor,
            DWORD       cbBuf,
       LPDWORD    pcbNeeded,
       LPDWORD    pcReturned
);
BOOL

AddMonitorA(
    LPSTR pName,
            DWORD   Level,
        LPBYTE  pMonitors
);
BOOL

AddMonitorW(
    LPWSTR pName,
            DWORD   Level,
        LPBYTE  pMonitors
);
BOOL

DeleteMonitorA(
    LPSTR     pName,
    LPSTR     pEnvironment,
        LPSTR     pMonitorName
);
BOOL

DeleteMonitorW(
    LPWSTR     pName,
    LPWSTR     pEnvironment,
        LPWSTR     pMonitorName
);
BOOL

EnumPortsA(
    LPSTR pName,
            DWORD   Level,
            LPBYTE  pPort,
            DWORD   cbBuf,
       LPDWORD pcbNeeded,
       LPDWORD pcReturned
);
BOOL

EnumPortsW(
    LPWSTR pName,
            DWORD   Level,
            LPBYTE  pPort,
            DWORD   cbBuf,
       LPDWORD pcbNeeded,
       LPDWORD pcReturned
);
BOOL

AddPortA(
    LPSTR   pName,
        HWND      hWnd,
        LPSTR   pMonitorName
);
BOOL

AddPortW(
    LPWSTR   pName,
        HWND      hWnd,
        LPWSTR   pMonitorName
);
BOOL

ConfigurePortA(
    LPSTR   pName,
        HWND      hWnd,
        LPSTR   pPortName
);
BOOL

ConfigurePortW(
    LPWSTR   pName,
        HWND      hWnd,
        LPWSTR   pPortName
);
BOOL

DeletePortA(
    LPSTR pName,
        HWND    hWnd,
        LPSTR pPortName
);
BOOL

DeletePortW(
    LPWSTR pName,
        HWND    hWnd,
        LPWSTR pPortName
);
BOOL

XcvDataW(
        HANDLE  hXcv,
        PCWSTR  pszDataName,
            PBYTE   pInputData,
            DWORD   cbInputData,
            PBYTE   pOutputData,
            DWORD   cbOutputData,
       PDWORD  pcbOutputNeeded,
   PDWORD  pdwStatus
);
BOOL

GetDefaultPrinterA(
       LPSTR   pszBuffer,
                             LPDWORD   pcchBuffer
    );
BOOL

GetDefaultPrinterW(
       LPWSTR   pszBuffer,
                             LPDWORD   pcchBuffer
    );
BOOL

SetDefaultPrinterA(
    LPCSTR pszPrinter
    );
BOOL

SetDefaultPrinterW(
    LPCWSTR pszPrinter
    );
BOOL

SetPortA(
    LPSTR     pName,
        LPSTR     pPortName,
            DWORD       dwLevel,
        LPBYTE      pPortInfo
);
BOOL

SetPortW(
    LPWSTR     pName,
        LPWSTR     pPortName,
            DWORD       dwLevel,
        LPBYTE      pPortInfo
);
BOOL

AddPrinterConnectionA(
 LPSTR   pName
);
BOOL

AddPrinterConnectionW(
 LPWSTR   pName
);
BOOL

DeletePrinterConnectionA(
 LPSTR   pName
);
BOOL

DeletePrinterConnectionW(
 LPWSTR   pName
);
HANDLE

ConnectToPrinterDlg(
    HWND    hwnd,
       DWORD    Flags
);
typedef struct _PROVIDOR_INFO_1A{
    LPSTR     pName;
    LPSTR     pEnvironment;
    LPSTR     pDLLName;
} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
typedef struct _PROVIDOR_INFO_1W{
    LPWSTR    pName;
    LPWSTR    pEnvironment;
    LPWSTR    pDLLName;
} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1;
typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1;
typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1;
typedef struct _PROVIDOR_INFO_2A{
    LPSTR     pOrder;
} PROVIDOR_INFO_2A, *PPROVIDOR_INFO_2A, *LPPROVIDOR_INFO_2A;
typedef struct _PROVIDOR_INFO_2W{
    LPWSTR    pOrder;
} PROVIDOR_INFO_2W, *PPROVIDOR_INFO_2W, *LPPROVIDOR_INFO_2W;
typedef PROVIDOR_INFO_2A PROVIDOR_INFO_2;
typedef PPROVIDOR_INFO_2A PPROVIDOR_INFO_2;
typedef LPPROVIDOR_INFO_2A LPPROVIDOR_INFO_2;
BOOL

AddPrintProvidorA(
    LPSTR  pName,
            DWORD    level,
        LPBYTE   pProvidorInfo
);
BOOL

AddPrintProvidorW(
    LPWSTR  pName,
            DWORD    level,
        LPBYTE   pProvidorInfo
);
BOOL

DeletePrintProvidorA(
    LPSTR   pName,
    LPSTR   pEnvironment,
        LPSTR   pPrintProvidorName
);
BOOL

DeletePrintProvidorW(
    LPWSTR   pName,
    LPWSTR   pEnvironment,
        LPWSTR   pPrintProvidorName
);
    BOOL

    IsValidDevmodeA(
            PDEVMODEA   pDevmode,
                    size_t      DevmodeSize
        );
    BOOL

    IsValidDevmodeW(
            PDEVMODEW   pDevmode,
                    size_t      DevmodeSize
        );
    typedef enum _PRINTER_OPTION_FLAGS
    {
        PRINTER_OPTION_NO_CACHE       = 1 << 0,
        PRINTER_OPTION_CACHE          = 1 << 1,
        PRINTER_OPTION_CLIENT_CHANGE  = 1 << 2,
        PRINTER_OPTION_NO_CLIENT_DATA = 1 << 3,
    } PRINTER_OPTION_FLAGS;
    typedef struct _PRINTER_OPTIONSA
    {
        UINT            cbSize;
        DWORD           dwFlags;
    } PRINTER_OPTIONSA, *PPRINTER_OPTIONSA, *LPPRINTER_OPTIONSA;
    typedef struct _PRINTER_OPTIONSW
    {
        UINT            cbSize;
        DWORD           dwFlags;
    } PRINTER_OPTIONSW, *PPRINTER_OPTIONSW, *LPPRINTER_OPTIONSW;
typedef PRINTER_OPTIONSA PRINTER_OPTIONS;
typedef PPRINTER_OPTIONSA PPRINTER_OPTIONS;
typedef LPPRINTER_OPTIONSA LPPRINTER_OPTIONS;
    BOOL

    OpenPrinter2A(
          LPCSTR                pPrinterName,
             LPHANDLE                phPrinter,
          PPRINTER_DEFAULTSA      pDefault,
          PPRINTER_OPTIONSA       pOptions
    );
    BOOL

    OpenPrinter2W(
          LPCWSTR                pPrinterName,
             LPHANDLE                phPrinter,
          PPRINTER_DEFAULTSW      pDefault,
          PPRINTER_OPTIONSW       pOptions
    );
    typedef struct _PRINTER_CONNECTION_INFO_1A
    {
        DWORD       dwFlags;
        LPSTR       pszDriverName;
    } PRINTER_CONNECTION_INFO_1A, *PPRINTER_CONNECTION_INFO_1A;
    typedef struct _PRINTER_CONNECTION_INFO_1W
    {
        DWORD       dwFlags;
        LPWSTR      pszDriverName;
    } PRINTER_CONNECTION_INFO_1W, *PPRINTER_CONNECTION_INFO_1W;
typedef PRINTER_CONNECTION_INFO_1A PRINTER_CONNECTION_INFO_1;
typedef PPRINTER_CONNECTION_INFO_1A PPRINTER_CONNECTION_INFO_1;
    BOOL

    AddPrinterConnection2A(
        HWND            hWnd,
            LPCSTR        pszName,
                DWORD           dwLevel,
            PVOID           pConnectionInfo
        );
    BOOL

    AddPrinterConnection2W(
        HWND            hWnd,
            LPCWSTR        pszName,
                DWORD           dwLevel,
            PVOID           pConnectionInfo
        );
    HRESULT
    InstallPrinterDriverFromPackageA(
       LPCSTR    pszServer,
       LPCSTR    pszInfPath,
           LPCSTR    pszDriverName,
       LPCSTR    pszEnvironment,
           DWORD       dwFlags
    );
    HRESULT
    InstallPrinterDriverFromPackageW(
       LPCWSTR    pszServer,
       LPCWSTR    pszInfPath,
           LPCWSTR    pszDriverName,
       LPCWSTR    pszEnvironment,
           DWORD       dwFlags
    );
    HRESULT
    UploadPrinterDriverPackageA(
       LPCSTR    pszServer,
           LPCSTR    pszInfPath,
       LPCSTR    pszEnvironment,
           DWORD       dwFlags,
           HWND        hwnd,
               LPSTR     pszDestInfPath,
        PULONG      pcchDestInfPath
    );
    HRESULT
    UploadPrinterDriverPackageW(
       LPCWSTR    pszServer,
           LPCWSTR    pszInfPath,
       LPCWSTR    pszEnvironment,
           DWORD       dwFlags,
           HWND        hwnd,
               LPWSTR     pszDestInfPath,
        PULONG      pcchDestInfPath
    );
    typedef struct _CORE_PRINTER_DRIVERA
    {
        GUID         CoreDriverGUID;
        FILETIME     ftDriverDate;
        DWORDLONG    dwlDriverVersion;
        CHAR         szPackageID[260];
    } CORE_PRINTER_DRIVERA, *PCORE_PRINTER_DRIVERA;
    typedef struct _CORE_PRINTER_DRIVERW
    {
        GUID         CoreDriverGUID;
        FILETIME     ftDriverDate;
        DWORDLONG    dwlDriverVersion;
        WCHAR        szPackageID[260];
    } CORE_PRINTER_DRIVERW, *PCORE_PRINTER_DRIVERW;
typedef CORE_PRINTER_DRIVERA CORE_PRINTER_DRIVER;
typedef PCORE_PRINTER_DRIVERA PCORE_PRINTER_DRIVER;
    HRESULT
    GetCorePrinterDriversA(
                              LPCSTR               pszServer,
                              LPCSTR               pszEnvironment,
                                  LPCSTR               pszzCoreDriverDependencies,
                                  DWORD                  cCorePrinterDrivers,
     PCORE_PRINTER_DRIVERA  pCorePrinterDrivers
    );
    HRESULT
    GetCorePrinterDriversW(
                              LPCWSTR               pszServer,
                              LPCWSTR               pszEnvironment,
                                  LPCWSTR               pszzCoreDriverDependencies,
                                  DWORD                  cCorePrinterDrivers,
     PCORE_PRINTER_DRIVERW  pCorePrinterDrivers
    );
    HRESULT
    CorePrinterDriverInstalledA(
                LPCSTR     pszServer,
                LPCSTR     pszEnvironment,
                    GUID         CoreDriverGUID,
                    FILETIME     ftDriverDate,
                    DWORDLONG    dwlDriverVersion,
                   BOOL         *pbDriverInstalled
    );
    HRESULT
    CorePrinterDriverInstalledW(
                LPCWSTR     pszServer,
                LPCWSTR     pszEnvironment,
                    GUID         CoreDriverGUID,
                    FILETIME     ftDriverDate,
                    DWORDLONG    dwlDriverVersion,
                   BOOL         *pbDriverInstalled
    );
    HRESULT
    GetPrinterDriverPackagePathA(
                                       LPCSTR      pszServer,
                                       LPCSTR      pszEnvironment,
                                       LPCSTR      pszLanguage,
                                           LPCSTR      pszPackageID,
        LPSTR       pszDriverPackageCab,
                                       DWORD         cchDriverPackageCab,
                                          LPDWORD       pcchRequiredSize
    );
    HRESULT
    GetPrinterDriverPackagePathW(
                                       LPCWSTR      pszServer,
                                       LPCWSTR      pszEnvironment,
                                       LPCWSTR      pszLanguage,
                                           LPCWSTR      pszPackageID,
        LPWSTR       pszDriverPackageCab,
                                       DWORD         cchDriverPackageCab,
                                          LPDWORD       pcchRequiredSize
    );
    HRESULT
    DeletePrinterDriverPackageA(
       LPCSTR    pszServer,
           LPCSTR    pszInfPath,
       LPCSTR    pszEnvironment
    );
    HRESULT
    DeletePrinterDriverPackageW(
       LPCWSTR    pszServer,
           LPCWSTR    pszInfPath,
       LPCWSTR    pszEnvironment
    );
    typedef enum
    {
        kPropertyTypeString = 1,
        kPropertyTypeInt32,
        kPropertyTypeInt64,
        kPropertyTypeByte,
        kPropertyTypeTime,
        kPropertyTypeDevMode,
        kPropertyTypeSD,
        kPropertyTypeNotificationReply,
        kPropertyTypeNotificationOptions,
        kPropertyTypeBuffer
    } EPrintPropertyType;
    typedef enum
    {
        kAddingDocumentSequence = 0,
        kDocumentSequenceAdded  = 1,
        kAddingFixedDocument    = 2,
        kFixedDocumentAdded     = 3,
        kAddingFixedPage        = 4,
        kFixedPageAdded         = 5,
        kResourceAdded          = 6,
        kFontAdded              = 7,
        kImageAdded             = 8,
        kXpsDocumentCommitted   = 9
    } EPrintXPSJobProgress;
    typedef enum
    {
        kJobProduction = 1,
        kJobConsumption
    } EPrintXPSJobOperation;
    typedef struct
    {
        EPrintPropertyType       ePropertyType;
        union
        {
            BYTE                 propertyByte;
            PWSTR                propertyString;
            LONG                 propertyInt32;
            LONGLONG             propertyInt64;
            struct {
                DWORD  cbBuf;
                LPVOID pBuf;
            }                    propertyBlob;
        } value;
    }PrintPropertyValue;
    typedef struct
    {
        WCHAR*                  propertyName;
        PrintPropertyValue      propertyValue;
    }PrintNamedProperty;
    typedef struct
    {
        ULONG                   numberOfProperties;
        PrintNamedProperty*     propertiesCollection;
    }PrintPropertiesCollection;
    HRESULT
    ReportJobProcessingProgress(
            HANDLE                         printerHandle,
                ULONG                          jobId,
                EPrintXPSJobOperation          jobOperation,
                EPrintXPSJobProgress           jobProgress
        );
    BOOL

    GetPrinterDriver2A(
            HWND    hWnd,
                HANDLE  hPrinter,
            LPSTR pEnvironment,
                    DWORD   Level,
                    LPBYTE  pDriverInfo,
                    DWORD   cbBuf,
               LPDWORD pcbNeeded
    );
    BOOL

    GetPrinterDriver2W(
            HWND    hWnd,
                HANDLE  hPrinter,
            LPWSTR pEnvironment,
                    DWORD   Level,
                    LPBYTE  pDriverInfo,
                    DWORD   cbBuf,
               LPDWORD pcbNeeded
    );
typedef int (__cdecl * _onexit_t)(void);
typedef struct _div_t {
        int quot;
        int rem;
} div_t;
typedef struct _ldiv_t {
        long quot;
        long rem;
} ldiv_t;
typedef struct {
    unsigned char ld[10];
} _LDOUBLE;
typedef struct {
        double x;
} _CRT_DOUBLE;
typedef struct {
    float f;
} _CRT_FLOAT;
typedef struct {
        long double x;
} _LONGDOUBLE;
typedef struct {
    unsigned char ld12[12];
} _LDBL12;
typedef void (__cdecl *_purecall_handler)(void);
 _purecall_handler __cdecl _set_purecall_handler(_purecall_handler _Handler);
 _purecall_handler __cdecl _get_purecall_handler();
typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t);
 _invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler _Handler);
 _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
 extern int * __cdecl _errno(void);
errno_t __cdecl _set_errno(int _Value);
errno_t __cdecl _get_errno(int * _Value);
 unsigned long * __cdecl __doserrno(void);
errno_t __cdecl _set_doserrno(unsigned long _Value);
errno_t __cdecl _get_doserrno(unsigned long * _Value);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char ** __cdecl __sys_errlist(void);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) int * __cdecl __sys_nerr(void);
 extern int __argc;
 extern char ** __argv;
 extern wchar_t ** __wargv;
 extern char ** _environ;
 extern wchar_t ** _wenviron;
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_pgmptr" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  extern char * _pgmptr;
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_wpgmptr" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  extern wchar_t * _wpgmptr;
errno_t __cdecl _get_pgmptr(char ** _Value);
errno_t __cdecl _get_wpgmptr(wchar_t ** _Value);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_fmode" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  extern int _fmode;
 errno_t __cdecl _set_fmode(int _Mode);
 errno_t __cdecl _get_fmode(int * _PMode);
 __declspec(noreturn) void __cdecl exit(int _Code);
 __declspec(noreturn) void __cdecl _exit(int _Code);
 void __cdecl abort(void);
 unsigned int __cdecl _set_abort_behavior(unsigned int _Flags, unsigned int _Mask);
        int     __cdecl abs(int _X);
        long    __cdecl labs(long _X);
        __int64    __cdecl _abs64(__int64);
        int    __cdecl atexit(void (__cdecl *)(void));
 double  __cdecl atof(const char *_String);
 double  __cdecl _atof_l(const char *_String, _locale_t _Locale);
  int    __cdecl atoi(const char *_Str);
 int    __cdecl _atoi_l(const char *_Str, _locale_t _Locale);
 long   __cdecl atol(const char *_Str);
 long   __cdecl _atol_l(const char *_Str, _locale_t _Locale);
 void * __cdecl bsearch_s(const void * _Key, const void * _Base,
        rsize_t _NumOfElements, rsize_t _SizeOfElements,
        int (__cdecl * _PtFuncCompare)(void *, const void *, const void *), void * _Context);
 void * __cdecl bsearch(const void * _Key, const void * _Base,
        size_t _NumOfElements, size_t _SizeOfElements,
        int (__cdecl * _PtFuncCompare)(const void *, const void *));
 void __cdecl qsort_s(void * _Base,
        rsize_t _NumOfElements, rsize_t _SizeOfElements,
        int (__cdecl * _PtFuncCompare)(void *, const void *, const void *), void *_Context);
 void __cdecl qsort(void * _Base,
	size_t _NumOfElements, size_t _SizeOfElements,
        int (__cdecl * _PtFuncCompare)(const void *, const void *));
        unsigned short __cdecl _byteswap_ushort(unsigned short _Short);
        unsigned long  __cdecl _byteswap_ulong (unsigned long _Long);
        unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 _Int64);
 div_t  __cdecl div(int _Numerator, int _Denominator);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_dupenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl getenv(const char * _VarName);
  errno_t __cdecl getenv_s(size_t * _ReturnSize, char * _DstBuf, rsize_t _DstSize, const char * _VarName);
  errno_t __cdecl _dupenv_s(char **_PBuffer, size_t * _PBufferSizeInBytes, const char * _VarName);
  errno_t __cdecl _itoa_s(int _Value, char * _DstBuf, size_t _Size, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_itoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _itoa(int _Value, char *_Dest, int _Radix);
  errno_t __cdecl _i64toa_s(__int64 _Val, char * _DstBuf, size_t _Size, int _Radix);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_i64toa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl _i64toa(__int64 _Val, char * _DstBuf, int _Radix);
  errno_t __cdecl _ui64toa_s(unsigned __int64 _Val, char * _DstBuf, size_t _Size, int _Radix);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ui64toa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl _ui64toa(unsigned __int64 _Val, char * _DstBuf, int _Radix);
 __int64 __cdecl _atoi64(const char * _String);
 __int64 __cdecl _atoi64_l(const char * _String, _locale_t _Locale);
 __int64 __cdecl _strtoi64(const char * _String, char ** _EndPtr, int _Radix);
 __int64 __cdecl _strtoi64_l(const char * _String, char ** _EndPtr, int _Radix, _locale_t _Locale);
 unsigned __int64 __cdecl _strtoui64(const char * _String, char ** _EndPtr, int _Radix);
 unsigned __int64 __cdecl _strtoui64_l(const char * _String, char ** _EndPtr, int  _Radix, _locale_t _Locale);
 ldiv_t __cdecl ldiv(long _Numerator, long _Denominator);
  errno_t __cdecl _ltoa_s(long _Val, char * _DstBuf, size_t _Size, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _ltoa(long _Value, char *_Dest, int _Radix);
 int    __cdecl mblen(const char * _Ch, size_t _MaxCount);
 int    __cdecl _mblen_l(const char * _Ch, size_t _MaxCount, _locale_t _Locale);
 size_t __cdecl _mbstrlen(const char * _Str);
 size_t __cdecl _mbstrlen_l(const char *_Str, _locale_t _Locale);
 size_t __cdecl _mbstrnlen(const char *_Str, size_t _MaxCount);
 size_t __cdecl _mbstrnlen_l(const char *_Str, size_t _MaxCount, _locale_t _Locale);
 int    __cdecl mbtowc(wchar_t * _DstCh, const char * _SrcCh, size_t _SrcSizeInBytes);
 int    __cdecl _mbtowc_l(wchar_t * _DstCh, const char * _SrcCh, size_t _SrcSizeInBytes, _locale_t _Locale);
  errno_t __cdecl mbstowcs_s(size_t * _PtNumOfCharConverted, wchar_t * _DstBuf, size_t _SizeInWords, const char * _SrcBuf, size_t _MaxCount );
__declspec(deprecated("This function or variable may be unsafe. Consider using " "mbstowcs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  size_t __cdecl mbstowcs(wchar_t *_Dest, const char * _Source, size_t _MaxCount);
  errno_t __cdecl _mbstowcs_s_l(size_t * _PtNumOfCharConverted, wchar_t * _DstBuf, size_t _SizeInWords, const char * _SrcBuf, size_t _MaxCount, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_mbstowcs_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  size_t __cdecl _mbstowcs_l(wchar_t *_Dest, const char * _Source, size_t _MaxCount, _locale_t _Locale);
 int    __cdecl rand(void);
  int    __cdecl _set_error_mode(int _Mode);
 void   __cdecl srand(unsigned int _Seed);
 double __cdecl strtod(const char * _Str, char ** _EndPtr);
 double __cdecl _strtod_l(const char * _Str, char ** _EndPtr, _locale_t _Locale);
 long   __cdecl strtol(const char * _Str, char ** _EndPtr, int _Radix );
 long   __cdecl _strtol_l(const char *_Str, char **_EndPtr, int _Radix, _locale_t _Locale);
 unsigned long __cdecl strtoul(const char * _Str, char ** _EndPtr, int _Radix);
 unsigned long __cdecl _strtoul_l(const char * _Str, char **_EndPtr, int _Radix, _locale_t _Locale);
 int __cdecl system(const char * _Command);
  errno_t __cdecl _ultoa_s(unsigned long _Val, char * _DstBuf, size_t _Size, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl _ultoa(unsigned long _Value, char *_Dest, int _Radix);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "wctomb_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) int    __cdecl wctomb(char * _MbCh, wchar_t _WCh);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wctomb_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) int    __cdecl _wctomb_l(char * _MbCh, wchar_t _WCh, _locale_t _Locale);
  errno_t __cdecl wctomb_s(int * _SizeConverted, char * _MbCh, rsize_t _SizeInBytes, wchar_t _WCh);
  errno_t __cdecl _wctomb_s_l(int * _SizeConverted, char * _MbCh, size_t _SizeInBytes, wchar_t _WCh, _locale_t _Locale);
  errno_t __cdecl wcstombs_s(size_t * _PtNumOfCharConverted, char * _Dst, size_t _DstSizeInBytes, const wchar_t * _Src, size_t _MaxCountInBytes);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstombs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  size_t __cdecl wcstombs(char *_Dest, const wchar_t * _Source, size_t _MaxCount);
  errno_t __cdecl _wcstombs_s_l(size_t * _PtNumOfCharConverted, char * _Dst, size_t _DstSizeInBytes, const wchar_t * _Src, size_t _MaxCountInBytes, _locale_t _Locale);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcstombs_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  size_t __cdecl _wcstombs_l(char *_Dest, const wchar_t * _Source, size_t _MaxCount, _locale_t _Locale);
  __declspec(noalias)    void * __cdecl calloc(size_t _NumOfElements, size_t _SizeOfElements);
                     __declspec(noalias)      void   __cdecl free(void * _Memory);
  __declspec(noalias)    void * __cdecl malloc(size_t _Size);
 __declspec(noalias)     void * __cdecl realloc(void * _Memory, size_t _NewSize);
 __declspec(noalias)     void * __cdecl _recalloc(void * _Memory, size_t _Count, size_t _Size);
                     __declspec(noalias)      void   __cdecl _aligned_free(void * _Memory);
 __declspec(noalias)     void * __cdecl _aligned_malloc(size_t _Size, size_t _Alignment);
 __declspec(noalias)     void * __cdecl _aligned_offset_malloc(size_t _Size, size_t _Alignment, size_t _Offset);
 __declspec(noalias)     void * __cdecl _aligned_realloc(void * _Memory, size_t _NewSize, size_t _Alignment);
 __declspec(noalias)     void * __cdecl _aligned_recalloc(void * _Memory, size_t _Count, size_t _Size, size_t _Alignment);
 __declspec(noalias)     void * __cdecl _aligned_offset_realloc(void * _Memory, size_t _NewSize, size_t _Alignment, size_t _Offset);
 __declspec(noalias)     void * __cdecl _aligned_offset_recalloc(void * _Memory, size_t _Count, size_t _Size, size_t _Alignment, size_t _Offset);
											  size_t __cdecl _aligned_msize(void * _Memory, size_t _Alignment, size_t _Offset);
											  errno_t __cdecl _itow_s (int _Val, wchar_t * _DstBuf, size_t _SizeInWords, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_itow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _itow(int _Value, wchar_t *_Dest, int _Radix);
  errno_t __cdecl _ltow_s (long _Val, wchar_t * _DstBuf, size_t _SizeInWords, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _ltow(long _Value, wchar_t *_Dest, int _Radix);
  errno_t __cdecl _ultow_s (unsigned long _Val, wchar_t * _DstBuf, size_t _SizeInWords, int _Radix);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  wchar_t * __cdecl _ultow(unsigned long _Value, wchar_t *_Dest, int _Radix);
 double __cdecl wcstod(const wchar_t * _Str, wchar_t ** _EndPtr);
 double __cdecl _wcstod_l(const wchar_t *_Str, wchar_t ** _EndPtr, _locale_t _Locale);
 long   __cdecl wcstol(const wchar_t *_Str, wchar_t ** _EndPtr, int _Radix);
 long   __cdecl _wcstol_l(const wchar_t *_Str, wchar_t **_EndPtr, int _Radix, _locale_t _Locale);
 unsigned long __cdecl wcstoul(const wchar_t *_Str, wchar_t ** _EndPtr, int _Radix);
 unsigned long __cdecl _wcstoul_l(const wchar_t *_Str, wchar_t **_EndPtr, int _Radix, _locale_t _Locale);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wdupenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) wchar_t * __cdecl _wgetenv(const wchar_t * _VarName);
  errno_t __cdecl _wgetenv_s(size_t * _ReturnSize, wchar_t * _DstBuf, size_t _DstSizeInWords, const wchar_t * _VarName);
  errno_t __cdecl _wdupenv_s(wchar_t **_Buffer, size_t *_BufferSizeInWords, const wchar_t *_VarName);
 int __cdecl _wsystem(const wchar_t * _Command);
 double __cdecl _wtof(const wchar_t *_Str);
 double __cdecl _wtof_l(const wchar_t *_Str, _locale_t _Locale);
 int __cdecl _wtoi(const wchar_t *_Str);
 int __cdecl _wtoi_l(const wchar_t *_Str, _locale_t _Locale);
 long __cdecl _wtol(const wchar_t *_Str);
 long __cdecl _wtol_l(const wchar_t *_Str, _locale_t _Locale);
  errno_t __cdecl _i64tow_s(__int64 _Val, wchar_t * _DstBuf, size_t _SizeInWords, int _Radix);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_i64tow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) wchar_t * __cdecl _i64tow(__int64 _Val, wchar_t * _DstBuf, int _Radix);
  errno_t __cdecl _ui64tow_s(unsigned __int64 _Val, wchar_t * _DstBuf, size_t _SizeInWords, int _Radix);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ui64tow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) wchar_t * __cdecl _ui64tow(unsigned __int64 _Val, wchar_t * _DstBuf, int _Radix);
 __int64   __cdecl _wtoi64(const wchar_t *_Str);
 __int64   __cdecl _wtoi64_l(const wchar_t *_Str, _locale_t _Locale);
 __int64   __cdecl _wcstoi64(const wchar_t * _Str, wchar_t ** _EndPtr, int _Radix);
 __int64   __cdecl _wcstoi64_l(const wchar_t * _Str, wchar_t ** _EndPtr, int _Radix, _locale_t _Locale);
 unsigned __int64  __cdecl _wcstoui64(const wchar_t * _Str, wchar_t ** _EndPtr, int _Radix);
 unsigned __int64  __cdecl _wcstoui64_l(const wchar_t *_Str , wchar_t ** _EndPtr, int _Radix, _locale_t _Locale);
 char * __cdecl _fullpath(char * _FullPath, const char * _Path, size_t _SizeInBytes);
  errno_t __cdecl _ecvt_s(char * _DstBuf, size_t _Size, double _Val, int _NumOfDights, int * _PtDec, int * _PtSign);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ecvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl _ecvt(double _Val, int _NumOfDigits, int * _PtDec, int * _PtSign);
  errno_t __cdecl _fcvt_s(char * _DstBuf, size_t _Size, double _Val, int _NumOfDec, int * _PtDec, int * _PtSign);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl _fcvt(double _Val, int _NumOfDec, int * _PtDec, int * _PtSign);
 errno_t __cdecl _gcvt_s(char * _DstBuf, size_t _Size, double _Val, int _NumOfDigits);
 __declspec(deprecated("This function or variable may be unsafe. Consider using " "_gcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")) char * __cdecl _gcvt(double _Val, int _NumOfDigits, char * _DstBuf);
 int __cdecl _atodbl(_CRT_DOUBLE * _Result, char * _Str);
 int __cdecl _atoldbl(_LDOUBLE * _Result, char * _Str);
 int __cdecl _atoflt(_CRT_FLOAT * _Result, char * _Str);
 int __cdecl _atodbl_l(_CRT_DOUBLE * _Result, char * _Str, _locale_t _Locale);
 int __cdecl _atoldbl_l(_LDOUBLE * _Result, char * _Str, _locale_t _Locale);
 int __cdecl _atoflt_l(_CRT_FLOAT * _Result, char * _Str, _locale_t _Locale);
        unsigned long __cdecl _lrotl(unsigned long _Val, int _Shift);
        unsigned long __cdecl _lrotr(unsigned long _Val, int _Shift);
  errno_t   __cdecl _makepath_s(char * _PathResult, size_t _SizeInWords, const char * _Drive, const char * _Dir, const char * _Filename,
        const char * _Ext);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_makepath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void __cdecl _makepath(char *_Path, const char * _Drive, const char * _Dir, const char * _Filename, const char * _Ext);
        _onexit_t __cdecl _onexit(_onexit_t _Func);
 void __cdecl perror(const char * _ErrMsg);
 int    __cdecl _putenv(const char * _EnvString);
  errno_t __cdecl _putenv_s(const char * _Name, const char * _Value);
        unsigned int __cdecl _rotl(unsigned int _Val, int _Shift);
        unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val, int _Shift);
        unsigned int __cdecl _rotr(unsigned int _Val, int _Shift);
        unsigned __int64 __cdecl _rotr64(unsigned __int64 _Val, int _Shift);
 errno_t __cdecl _searchenv_s(const char * _Filename, const char * _EnvVar, char * _ResultPath, size_t _SizeInBytes);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_searchenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void __cdecl _searchenv(const char * _Filename, const char * _EnvVar, char *_ResultPath);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_splitpath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void   __cdecl _splitpath(const char * _FullPath, char * _Drive, char * _Dir, char * _Filename, char * _Ext);
  errno_t  __cdecl _splitpath_s(const char * _FullPath,
		char * _Drive, size_t _DriveSize,
		char * _Dir, size_t _DirSize,
		char * _Filename, size_t _FilenameSize,
		char * _Ext, size_t _ExtSize);
 void   __cdecl _swab(char * _Buf1, char * _Buf2, int _SizeInBytes);
 wchar_t * __cdecl _wfullpath(wchar_t * _FullPath, const wchar_t * _Path, size_t _SizeInWords);
  errno_t __cdecl _wmakepath_s(wchar_t * _PathResult, size_t _SIZE, const wchar_t * _Drive, const wchar_t * _Dir, const wchar_t * _Filename,
        const wchar_t * _Ext);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wmakepath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void __cdecl _wmakepath(wchar_t *_ResultPath, const wchar_t * _Drive, const wchar_t * _Dir, const wchar_t * _Filename, const wchar_t * _Ext);
 void __cdecl _wperror(const wchar_t * _ErrMsg);
 int    __cdecl _wputenv(const wchar_t * _EnvString);
  errno_t __cdecl _wputenv_s(const wchar_t * _Name, const wchar_t * _Value);
 errno_t __cdecl _wsearchenv_s(const wchar_t * _Filename, const wchar_t * _EnvVar, wchar_t * _ResultPath, size_t _SizeInWords);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsearchenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void __cdecl _wsearchenv(const wchar_t * _Filename, const wchar_t * _EnvVar, wchar_t *_ResultPath);
__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsplitpath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  void   __cdecl _wsplitpath(const wchar_t * _FullPath, wchar_t * _Drive, wchar_t * _Dir, wchar_t * _Filename, wchar_t * _Ext);
 errno_t __cdecl _wsplitpath_s(const wchar_t * _FullPath,
		wchar_t * _Drive, size_t _DriveSize,
		wchar_t * _Dir, size_t _DirSize,
		wchar_t * _Filename, size_t _FilenameSize,
		wchar_t * _Ext, size_t _ExtSize);
__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using " "SetErrorMode" " instead. See online help for details."))  void __cdecl _seterrormode(int _Mode);
__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using " "Beep" " instead. See online help for details."))  void __cdecl _beep(unsigned _Frequency, unsigned _Duration);
__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using " "Sleep" " instead. See online help for details."))  void __cdecl _sleep(unsigned long _Duration);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ecvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ecvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl ecvt(double _Val, int _NumOfDigits, int * _PtDec, int * _PtSign);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fcvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))  char * __cdecl fcvt(double _Val, int _NumOfDec, int * _PtDec, int * _PtSign);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_gcvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))		 char * __cdecl gcvt(double _Val, int _NumOfDigits, char * _DstBuf);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_itoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_itoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))		 char * __cdecl itoa(int _Val, char * _DstBuf, int _Radix);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ltoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))		 char * __cdecl ltoa(long _Val, char * _DstBuf, int _Radix);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_putenv" ". See online help for details."))  int    __cdecl putenv(const char * _EnvString);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_swab" ". See online help for details."))										 void   __cdecl swab(char * _Buf1,char * _Buf2, int _SizeInBytes);
__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ultoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."))	 char * __cdecl ultoa(unsigned long _Val, char * _Dstbuf, int _Radix);
_onexit_t __cdecl onexit(_onexit_t _Func);
typedef enum tagREGCLS
{
    REGCLS_SINGLEUSE = 0,
    REGCLS_MULTIPLEUSE = 1,
    REGCLS_MULTI_SEPARATE = 2,
    REGCLS_SUSPENDED      = 4,
    REGCLS_SURROGATE      = 8
} REGCLS;
typedef DWORD STGFMT;
typedef struct    IRpcStubBuffer     IRpcStubBuffer;
typedef struct    IRpcChannelBuffer  IRpcChannelBuffer;
typedef struct IUnknown IUnknown;
typedef struct AsyncIUnknown AsyncIUnknown;
typedef struct IClassFactory IClassFactory;
extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_0000_v0_0_s_ifspec;
typedef  IUnknown *LPUNKNOWN;
extern const IID IID_IUnknown;
    typedef struct IUnknownVtbl
    {
        HRESULT (  *QueryInterface )(
            IUnknown * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUnknown * This);
        ULONG (  *Release )(
            IUnknown * This);
    } IUnknownVtbl;
    struct IUnknown
    {
         struct IUnknownVtbl *lpVtbl;
    };
HRESULT  IUnknown_QueryInterface_Proxy(
    IUnknown * This,
     const IID * const riid,
      void **ppvObject);
void  IUnknown_QueryInterface_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
ULONG  IUnknown_AddRef_Proxy(
    IUnknown * This);
void  IUnknown_AddRef_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
ULONG  IUnknown_Release_Proxy(
    IUnknown * This);
void  IUnknown_Release_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_0001_v0_0_s_ifspec;
extern const IID IID_AsyncIUnknown;
    typedef struct AsyncIUnknownVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIUnknown * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIUnknown * This);
        ULONG (  *Release )(
            AsyncIUnknown * This);
        HRESULT (  *Begin_QueryInterface )(
            AsyncIUnknown * This,
             const IID * const riid);
        HRESULT (  *Finish_QueryInterface )(
            AsyncIUnknown * This,
              void **ppvObject);
        HRESULT (  *Begin_AddRef )(
            AsyncIUnknown * This);
        ULONG (  *Finish_AddRef )(
            AsyncIUnknown * This);
        HRESULT (  *Begin_Release )(
            AsyncIUnknown * This);
        ULONG (  *Finish_Release )(
            AsyncIUnknown * This);
    } AsyncIUnknownVtbl;
    struct AsyncIUnknown
    {
         struct AsyncIUnknownVtbl *lpVtbl;
    };
typedef    IClassFactory *LPCLASSFACTORY;
extern const IID IID_IClassFactory;
    typedef struct IClassFactoryVtbl
    {
        HRESULT (  *QueryInterface )(
            IClassFactory * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IClassFactory * This);
        ULONG (  *Release )(
            IClassFactory * This);
         HRESULT (  *CreateInstance )(
            IClassFactory * This,
             IUnknown *pUnkOuter,
             const IID * const riid,
             void **ppvObject);
         HRESULT (  *LockServer )(
            IClassFactory * This,
             BOOL fLock);
    } IClassFactoryVtbl;
    struct IClassFactory
    {
         struct IClassFactoryVtbl *lpVtbl;
    };
 HRESULT  IClassFactory_RemoteCreateInstance_Proxy(
    IClassFactory * This,
      const IID * const riid,
      IUnknown **ppvObject);
void  IClassFactory_RemoteCreateInstance_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IClassFactory_RemoteLockServer_Proxy(
    IClassFactory * This,
     BOOL fLock);
void  IClassFactory_RemoteLockServer_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IClassFactory_CreateInstance_Proxy(
    IClassFactory * This,
     IUnknown *pUnkOuter,
     const IID * const riid,
     void **ppvObject);
 HRESULT  IClassFactory_CreateInstance_Stub(
    IClassFactory * This,
      const IID * const riid,
      IUnknown **ppvObject);
 HRESULT  IClassFactory_LockServer_Proxy(
    IClassFactory * This,
     BOOL fLock);
 HRESULT  IClassFactory_LockServer_Stub(
    IClassFactory * This,
     BOOL fLock);
typedef struct IMarshal IMarshal;
typedef struct IMarshal2 IMarshal2;
typedef struct IMalloc IMalloc;
typedef struct IMallocSpy IMallocSpy;
typedef struct IStdMarshalInfo IStdMarshalInfo;
typedef struct IExternalConnection IExternalConnection;
typedef struct IMultiQI IMultiQI;
typedef struct AsyncIMultiQI AsyncIMultiQI;
typedef struct IInternalUnknown IInternalUnknown;
typedef struct IEnumUnknown IEnumUnknown;
typedef struct IBindCtx IBindCtx;
typedef struct IEnumMoniker IEnumMoniker;
typedef struct IRunnableObject IRunnableObject;
typedef struct IRunningObjectTable IRunningObjectTable;
typedef struct IPersist IPersist;
typedef struct IPersistStream IPersistStream;
typedef struct IMoniker IMoniker;
typedef struct IROTData IROTData;
typedef struct IEnumString IEnumString;
typedef struct ISequentialStream ISequentialStream;
typedef struct IStream IStream;
typedef struct IEnumSTATSTG IEnumSTATSTG;
typedef struct IStorage IStorage;
typedef struct IPersistFile IPersistFile;
typedef struct IPersistStorage IPersistStorage;
typedef struct ILockBytes ILockBytes;
typedef struct IEnumFORMATETC IEnumFORMATETC;
typedef struct IEnumSTATDATA IEnumSTATDATA;
typedef struct IRootStorage IRootStorage;
typedef struct IAdviseSink IAdviseSink;
typedef struct AsyncIAdviseSink AsyncIAdviseSink;
typedef struct IAdviseSink2 IAdviseSink2;
typedef struct AsyncIAdviseSink2 AsyncIAdviseSink2;
typedef struct IDataObject IDataObject;
typedef struct IDataAdviseHolder IDataAdviseHolder;
typedef struct IMessageFilter IMessageFilter;
typedef struct IRpcChannelBuffer IRpcChannelBuffer;
typedef struct IRpcChannelBuffer2 IRpcChannelBuffer2;
typedef struct IAsyncRpcChannelBuffer IAsyncRpcChannelBuffer;
typedef struct IRpcChannelBuffer3 IRpcChannelBuffer3;
typedef struct IRpcSyntaxNegotiate IRpcSyntaxNegotiate;
typedef struct IRpcProxyBuffer IRpcProxyBuffer;
typedef struct IRpcStubBuffer IRpcStubBuffer;
typedef struct IPSFactoryBuffer IPSFactoryBuffer;
typedef struct IChannelHook IChannelHook;
typedef struct IClientSecurity IClientSecurity;
typedef struct IServerSecurity IServerSecurity;
typedef struct IClassActivator IClassActivator;
typedef struct IRpcOptions IRpcOptions;
typedef struct IFillLockBytes IFillLockBytes;
typedef struct IProgressNotify IProgressNotify;
typedef struct ILayoutStorage ILayoutStorage;
typedef struct IBlockingLock IBlockingLock;
typedef struct ITimeAndNoticeControl ITimeAndNoticeControl;
typedef struct IOplockStorage IOplockStorage;
typedef struct ISurrogate ISurrogate;
typedef struct IGlobalInterfaceTable IGlobalInterfaceTable;
typedef struct IDirectWriterLock IDirectWriterLock;
typedef struct ISynchronize ISynchronize;
typedef struct ISynchronizeHandle ISynchronizeHandle;
typedef struct ISynchronizeEvent ISynchronizeEvent;
typedef struct ISynchronizeContainer ISynchronizeContainer;
typedef struct ISynchronizeMutex ISynchronizeMutex;
typedef struct ICancelMethodCalls ICancelMethodCalls;
typedef struct IAsyncManager IAsyncManager;
typedef struct ICallFactory ICallFactory;
typedef struct IRpcHelper IRpcHelper;
typedef struct IReleaseMarshalBuffers IReleaseMarshalBuffers;
typedef struct IWaitMultiple IWaitMultiple;
typedef struct IUrlMon IUrlMon;
typedef struct IForegroundTransfer IForegroundTransfer;
typedef struct IAddrTrackingControl IAddrTrackingControl;
typedef struct IAddrExclusionControl IAddrExclusionControl;
typedef struct IPipeByte IPipeByte;
typedef struct AsyncIPipeByte AsyncIPipeByte;
typedef struct IPipeLong IPipeLong;
typedef struct AsyncIPipeLong AsyncIPipeLong;
typedef struct IPipeDouble IPipeDouble;
typedef struct AsyncIPipeDouble AsyncIPipeDouble;
typedef struct IThumbnailExtractor IThumbnailExtractor;
typedef struct IDummyHICONIncluder IDummyHICONIncluder;
typedef struct IEnumContextProps IEnumContextProps;
typedef struct IContext IContext;
typedef struct IObjContext IObjContext;
typedef struct IProcessLock IProcessLock;
typedef struct ISurrogateService ISurrogateService;
typedef struct IComThreadingInfo IComThreadingInfo;
typedef struct IProcessInitControl IProcessInitControl;
typedef struct IInitializeSpy IInitializeSpy;
typedef struct _COSERVERINFO
    {
    DWORD dwReserved1;
    LPWSTR pwszName;
    COAUTHINFO *pAuthInfo;
    DWORD dwReserved2;
    } 	COSERVERINFO;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0000_v0_0_s_ifspec;
typedef  IMarshal *LPMARSHAL;
extern const IID IID_IMarshal;
    typedef struct IMarshalVtbl
    {
        HRESULT (  *QueryInterface )(
            IMarshal * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMarshal * This);
        ULONG (  *Release )(
            IMarshal * This);
        HRESULT (  *GetUnmarshalClass )(
            IMarshal * This,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags,
             CLSID *pCid);
        HRESULT (  *GetMarshalSizeMax )(
            IMarshal * This,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags,
             DWORD *pSize);
        HRESULT (  *MarshalInterface )(
            IMarshal * This,
             IStream *pStm,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags);
        HRESULT (  *UnmarshalInterface )(
            IMarshal * This,
             IStream *pStm,
             const IID * const riid,
             void **ppv);
        HRESULT (  *ReleaseMarshalData )(
            IMarshal * This,
             IStream *pStm);
        HRESULT (  *DisconnectObject )(
            IMarshal * This,
             DWORD dwReserved);
    } IMarshalVtbl;
    struct IMarshal
    {
         struct IMarshalVtbl *lpVtbl;
    };
typedef  IMarshal2 *LPMARSHAL2;
extern const IID IID_IMarshal2;
    typedef struct IMarshal2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IMarshal2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMarshal2 * This);
        ULONG (  *Release )(
            IMarshal2 * This);
        HRESULT (  *GetUnmarshalClass )(
            IMarshal2 * This,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags,
             CLSID *pCid);
        HRESULT (  *GetMarshalSizeMax )(
            IMarshal2 * This,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags,
             DWORD *pSize);
        HRESULT (  *MarshalInterface )(
            IMarshal2 * This,
             IStream *pStm,
             const IID * const riid,
             void *pv,
             DWORD dwDestContext,
             void *pvDestContext,
             DWORD mshlflags);
        HRESULT (  *UnmarshalInterface )(
            IMarshal2 * This,
             IStream *pStm,
             const IID * const riid,
             void **ppv);
        HRESULT (  *ReleaseMarshalData )(
            IMarshal2 * This,
             IStream *pStm);
        HRESULT (  *DisconnectObject )(
            IMarshal2 * This,
             DWORD dwReserved);
    } IMarshal2Vtbl;
    struct IMarshal2
    {
         struct IMarshal2Vtbl *lpVtbl;
    };
typedef  IMalloc *LPMALLOC;
extern const IID IID_IMalloc;
    typedef struct IMallocVtbl
    {
        HRESULT (  *QueryInterface )(
            IMalloc * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMalloc * This);
        ULONG (  *Release )(
            IMalloc * This);
        void *(  *Alloc )(
            IMalloc * This,
             SIZE_T cb);
        void *(  *Realloc )(
            IMalloc * This,
             void *pv,
             SIZE_T cb);
        void (  *Free )(
            IMalloc * This,
             void *pv);
        SIZE_T (  *GetSize )(
            IMalloc * This,
             void *pv);
        int (  *DidAlloc )(
            IMalloc * This,
            void *pv);
        void (  *HeapMinimize )(
            IMalloc * This);
    } IMallocVtbl;
    struct IMalloc
    {
         struct IMallocVtbl *lpVtbl;
    };
typedef  IMallocSpy *LPMALLOCSPY;
extern const IID IID_IMallocSpy;
    typedef struct IMallocSpyVtbl
    {
        HRESULT (  *QueryInterface )(
            IMallocSpy * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMallocSpy * This);
        ULONG (  *Release )(
            IMallocSpy * This);
        SIZE_T (  *PreAlloc )(
            IMallocSpy * This,
             SIZE_T cbRequest);
        void *(  *PostAlloc )(
            IMallocSpy * This,
             void *pActual);
        void *(  *PreFree )(
            IMallocSpy * This,
             void *pRequest,
             BOOL fSpyed);
        void (  *PostFree )(
            IMallocSpy * This,
             BOOL fSpyed);
        SIZE_T (  *PreRealloc )(
            IMallocSpy * This,
             void *pRequest,
             SIZE_T cbRequest,
             void **ppNewRequest,
             BOOL fSpyed);
        void *(  *PostRealloc )(
            IMallocSpy * This,
             void *pActual,
             BOOL fSpyed);
        void *(  *PreGetSize )(
            IMallocSpy * This,
             void *pRequest,
             BOOL fSpyed);
        SIZE_T (  *PostGetSize )(
            IMallocSpy * This,
             SIZE_T cbActual,
             BOOL fSpyed);
        void *(  *PreDidAlloc )(
            IMallocSpy * This,
             void *pRequest,
             BOOL fSpyed);
        int (  *PostDidAlloc )(
            IMallocSpy * This,
             void *pRequest,
             BOOL fSpyed,
             int fActual);
        void (  *PreHeapMinimize )(
            IMallocSpy * This);
        void (  *PostHeapMinimize )(
            IMallocSpy * This);
    } IMallocSpyVtbl;
    struct IMallocSpy
    {
         struct IMallocSpyVtbl *lpVtbl;
    };
typedef  IStdMarshalInfo *LPSTDMARSHALINFO;
extern const IID IID_IStdMarshalInfo;
    typedef struct IStdMarshalInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IStdMarshalInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IStdMarshalInfo * This);
        ULONG (  *Release )(
            IStdMarshalInfo * This);
        HRESULT (  *GetClassForHandler )(
            IStdMarshalInfo * This,
             DWORD dwDestContext,
             void *pvDestContext,
             CLSID *pClsid);
    } IStdMarshalInfoVtbl;
    struct IStdMarshalInfo
    {
         struct IStdMarshalInfoVtbl *lpVtbl;
    };
typedef  IExternalConnection *LPEXTERNALCONNECTION;
typedef
enum tagEXTCONN
    {	EXTCONN_STRONG	= 0x1,
	EXTCONN_WEAK	= 0x2,
	EXTCONN_CALLABLE	= 0x4
    } 	EXTCONN;
extern const IID IID_IExternalConnection;
    typedef struct IExternalConnectionVtbl
    {
        HRESULT (  *QueryInterface )(
            IExternalConnection * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IExternalConnection * This);
        ULONG (  *Release )(
            IExternalConnection * This);
        DWORD (  *AddConnection )(
            IExternalConnection * This,
             DWORD extconn,
             DWORD reserved);
        DWORD (  *ReleaseConnection )(
            IExternalConnection * This,
             DWORD extconn,
             DWORD reserved,
             BOOL fLastReleaseCloses);
    } IExternalConnectionVtbl;
    struct IExternalConnection
    {
         struct IExternalConnectionVtbl *lpVtbl;
    };
typedef    IMultiQI *LPMULTIQI;
typedef struct tagMULTI_QI
    {
    const IID *pIID;
    IUnknown *pItf;
    HRESULT hr;
    } 	MULTI_QI;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0006_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0006_v0_0_s_ifspec;
extern const IID IID_IMultiQI;
    typedef struct IMultiQIVtbl
    {
        HRESULT (  *QueryInterface )(
            IMultiQI * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMultiQI * This);
        ULONG (  *Release )(
            IMultiQI * This);
        HRESULT (  *QueryMultipleInterfaces )(
            IMultiQI * This,
             ULONG cMQIs,
             MULTI_QI *pMQIs);
    } IMultiQIVtbl;
    struct IMultiQI
    {
         struct IMultiQIVtbl *lpVtbl;
    };
extern const IID IID_AsyncIMultiQI;
    typedef struct AsyncIMultiQIVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIMultiQI * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIMultiQI * This);
        ULONG (  *Release )(
            AsyncIMultiQI * This);
        HRESULT (  *Begin_QueryMultipleInterfaces )(
            AsyncIMultiQI * This,
             ULONG cMQIs,
             MULTI_QI *pMQIs);
        HRESULT (  *Finish_QueryMultipleInterfaces )(
            AsyncIMultiQI * This,
             MULTI_QI *pMQIs);
    } AsyncIMultiQIVtbl;
    struct AsyncIMultiQI
    {
         struct AsyncIMultiQIVtbl *lpVtbl;
    };
extern const IID IID_IInternalUnknown;
    typedef struct IInternalUnknownVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternalUnknown * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternalUnknown * This);
        ULONG (  *Release )(
            IInternalUnknown * This);
        HRESULT (  *QueryInternalInterface )(
            IInternalUnknown * This,
             const IID * const riid,
             void **ppv);
    } IInternalUnknownVtbl;
    struct IInternalUnknown
    {
         struct IInternalUnknownVtbl *lpVtbl;
    };
typedef    IEnumUnknown *LPENUMUNKNOWN;
extern const IID IID_IEnumUnknown;
    typedef struct IEnumUnknownVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumUnknown * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumUnknown * This);
        ULONG (  *Release )(
            IEnumUnknown * This);
         HRESULT (  *Next )(
            IEnumUnknown * This,
             ULONG celt,
             IUnknown **rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumUnknown * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumUnknown * This);
        HRESULT (  *Clone )(
            IEnumUnknown * This,
              IEnumUnknown **ppenum);
    } IEnumUnknownVtbl;
    struct IEnumUnknown
    {
         struct IEnumUnknownVtbl *lpVtbl;
    };
 HRESULT  IEnumUnknown_RemoteNext_Proxy(
    IEnumUnknown * This,
     ULONG celt,
      IUnknown **rgelt,
      ULONG *pceltFetched);
void  IEnumUnknown_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IBindCtx *LPBC;
typedef    IBindCtx *LPBINDCTX;
typedef struct tagBIND_OPTS
    {
    DWORD cbStruct;
    DWORD grfFlags;
    DWORD grfMode;
    DWORD dwTickCountDeadline;
    } 	BIND_OPTS;
typedef struct tagBIND_OPTS *LPBIND_OPTS;
typedef struct tagBIND_OPTS2
    {
    DWORD cbStruct;
    DWORD grfFlags;
    DWORD grfMode;
    DWORD dwTickCountDeadline;
    DWORD dwTrackFlags;
    DWORD dwClassContext;
    LCID locale;
    COSERVERINFO *pServerInfo;
    } 	BIND_OPTS2;
typedef struct tagBIND_OPTS2 *LPBIND_OPTS2;
typedef struct tagBIND_OPTS3
    {
    DWORD cbStruct;
    DWORD grfFlags;
    DWORD grfMode;
    DWORD dwTickCountDeadline;
    DWORD dwTrackFlags;
    DWORD dwClassContext;
    LCID locale;
    COSERVERINFO *pServerInfo;
    HWND hwnd;
    } 	BIND_OPTS3;
typedef struct tagBIND_OPTS3 *LPBIND_OPTS3;
typedef
enum tagBIND_FLAGS
    {	BIND_MAYBOTHERUSER	= 1,
	BIND_JUSTTESTEXISTENCE	= 2
    } 	BIND_FLAGS;
extern const IID IID_IBindCtx;
    typedef struct IBindCtxVtbl
    {
        HRESULT (  *QueryInterface )(
            IBindCtx * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBindCtx * This);
        ULONG (  *Release )(
            IBindCtx * This);
        HRESULT (  *RegisterObjectBound )(
            IBindCtx * This,
              IUnknown *punk);
        HRESULT (  *RevokeObjectBound )(
            IBindCtx * This,
              IUnknown *punk);
        HRESULT (  *ReleaseBoundObjects )(
            IBindCtx * This);
         HRESULT (  *SetBindOptions )(
            IBindCtx * This,
             BIND_OPTS *pbindopts);
         HRESULT (  *GetBindOptions )(
            IBindCtx * This,
             BIND_OPTS *pbindopts);
        HRESULT (  *GetRunningObjectTable )(
            IBindCtx * This,
              IRunningObjectTable **pprot);
        HRESULT (  *RegisterObjectParam )(
            IBindCtx * This,
              LPOLESTR pszKey,
              IUnknown *punk);
        HRESULT (  *GetObjectParam )(
            IBindCtx * This,
              LPOLESTR pszKey,
              IUnknown **ppunk);
        HRESULT (  *EnumObjectParam )(
            IBindCtx * This,
              IEnumString **ppenum);
        HRESULT (  *RevokeObjectParam )(
            IBindCtx * This,
              LPOLESTR pszKey);
    } IBindCtxVtbl;
    struct IBindCtx
    {
         struct IBindCtxVtbl *lpVtbl;
    };
 HRESULT  IBindCtx_RemoteSetBindOptions_Proxy(
    IBindCtx * This,
      BIND_OPTS2 *pbindopts);
void  IBindCtx_RemoteSetBindOptions_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IBindCtx_RemoteGetBindOptions_Proxy(
    IBindCtx * This,
      BIND_OPTS2 *pbindopts);
void  IBindCtx_RemoteGetBindOptions_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumMoniker *LPENUMMONIKER;
extern const IID IID_IEnumMoniker;
    typedef struct IEnumMonikerVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumMoniker * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumMoniker * This);
        ULONG (  *Release )(
            IEnumMoniker * This);
         HRESULT (  *Next )(
            IEnumMoniker * This,
             ULONG celt,
             IMoniker **rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumMoniker * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumMoniker * This);
        HRESULT (  *Clone )(
            IEnumMoniker * This,
              IEnumMoniker **ppenum);
    } IEnumMonikerVtbl;
    struct IEnumMoniker
    {
         struct IEnumMonikerVtbl *lpVtbl;
    };
 HRESULT  IEnumMoniker_RemoteNext_Proxy(
    IEnumMoniker * This,
     ULONG celt,
      IMoniker **rgelt,
      ULONG *pceltFetched);
void  IEnumMoniker_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IRunnableObject *LPRUNNABLEOBJECT;
extern const IID IID_IRunnableObject;
    typedef struct IRunnableObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IRunnableObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRunnableObject * This);
        ULONG (  *Release )(
            IRunnableObject * This);
        HRESULT (  *GetRunningClass )(
            IRunnableObject * This,
              LPCLSID lpClsid);
        HRESULT (  *Run )(
            IRunnableObject * This,
              LPBINDCTX pbc);
         BOOL (  *IsRunning )(
            IRunnableObject * This);
        HRESULT (  *LockRunning )(
            IRunnableObject * This,
             BOOL fLock,
             BOOL fLastUnlockCloses);
        HRESULT (  *SetContainedObject )(
            IRunnableObject * This,
             BOOL fContained);
    } IRunnableObjectVtbl;
    struct IRunnableObject
    {
         struct IRunnableObjectVtbl *lpVtbl;
    };
 HRESULT  IRunnableObject_RemoteIsRunning_Proxy(
    IRunnableObject * This);
void  IRunnableObject_RemoteIsRunning_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IRunningObjectTable *LPRUNNINGOBJECTTABLE;
extern const IID IID_IRunningObjectTable;
    typedef struct IRunningObjectTableVtbl
    {
        HRESULT (  *QueryInterface )(
            IRunningObjectTable * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRunningObjectTable * This);
        ULONG (  *Release )(
            IRunningObjectTable * This);
        HRESULT (  *Register )(
            IRunningObjectTable * This,
             DWORD grfFlags,
              IUnknown *punkObject,
              IMoniker *pmkObjectName,
              DWORD *pdwRegister);
        HRESULT (  *Revoke )(
            IRunningObjectTable * This,
             DWORD dwRegister);
        HRESULT (  *IsRunning )(
            IRunningObjectTable * This,
              IMoniker *pmkObjectName);
        HRESULT (  *GetObjectA )(
            IRunningObjectTable * This,
              IMoniker *pmkObjectName,
              IUnknown **ppunkObject);
        HRESULT (  *NoteChangeTime )(
            IRunningObjectTable * This,
             DWORD dwRegister,
              FILETIME *pfiletime);
        HRESULT (  *GetTimeOfLastChange )(
            IRunningObjectTable * This,
              IMoniker *pmkObjectName,
              FILETIME *pfiletime);
        HRESULT (  *EnumRunning )(
            IRunningObjectTable * This,
              IEnumMoniker **ppenumMoniker);
    } IRunningObjectTableVtbl;
    struct IRunningObjectTable
    {
         struct IRunningObjectTableVtbl *lpVtbl;
    };
typedef    IPersist *LPPERSIST;
extern const IID IID_IPersist;
    typedef struct IPersistVtbl
    {
        HRESULT (  *QueryInterface )(
            IPersist * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPersist * This);
        ULONG (  *Release )(
            IPersist * This);
        HRESULT (  *GetClassID )(
            IPersist * This,
              CLSID *pClassID);
    } IPersistVtbl;
    struct IPersist
    {
         struct IPersistVtbl *lpVtbl;
    };
typedef    IPersistStream *LPPERSISTSTREAM;
extern const IID IID_IPersistStream;
    typedef struct IPersistStreamVtbl
    {
        HRESULT (  *QueryInterface )(
            IPersistStream * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPersistStream * This);
        ULONG (  *Release )(
            IPersistStream * This);
        HRESULT (  *GetClassID )(
            IPersistStream * This,
              CLSID *pClassID);
        HRESULT (  *IsDirty )(
            IPersistStream * This);
        HRESULT (  *Load )(
            IPersistStream * This,
              IStream *pStm);
        HRESULT (  *Save )(
            IPersistStream * This,
              IStream *pStm,
             BOOL fClearDirty);
        HRESULT (  *GetSizeMax )(
            IPersistStream * This,
              ULARGE_INTEGER *pcbSize);
    } IPersistStreamVtbl;
    struct IPersistStream
    {
         struct IPersistStreamVtbl *lpVtbl;
    };
typedef    IMoniker *LPMONIKER;
typedef
enum tagMKSYS
    {	MKSYS_NONE	= 0,
	MKSYS_GENERICCOMPOSITE	= 1,
	MKSYS_FILEMONIKER	= 2,
	MKSYS_ANTIMONIKER	= 3,
	MKSYS_ITEMMONIKER	= 4,
	MKSYS_POINTERMONIKER	= 5,
	MKSYS_CLASSMONIKER	= 7,
	MKSYS_OBJREFMONIKER	= 8,
	MKSYS_SESSIONMONIKER	= 9,
	MKSYS_LUAMONIKER	= 10
    } 	MKSYS;
typedef
enum tagMKREDUCE
    {	MKRREDUCE_ONE	= ( 3 << 16 ) ,
	MKRREDUCE_TOUSER	= ( 2 << 16 ) ,
	MKRREDUCE_THROUGHUSER	= ( 1 << 16 ) ,
	MKRREDUCE_ALL	= 0
    } 	MKRREDUCE;
extern const IID IID_IMoniker;
    typedef struct IMonikerVtbl
    {
        HRESULT (  *QueryInterface )(
            IMoniker * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMoniker * This);
        ULONG (  *Release )(
            IMoniker * This);
        HRESULT (  *GetClassID )(
            IMoniker * This,
              CLSID *pClassID);
        HRESULT (  *IsDirty )(
            IMoniker * This);
        HRESULT (  *Load )(
            IMoniker * This,
              IStream *pStm);
        HRESULT (  *Save )(
            IMoniker * This,
              IStream *pStm,
             BOOL fClearDirty);
        HRESULT (  *GetSizeMax )(
            IMoniker * This,
              ULARGE_INTEGER *pcbSize);
         HRESULT (  *BindToObject )(
            IMoniker * This,
             IBindCtx *pbc,
             IMoniker *pmkToLeft,
             const IID * const riidResult,
             void **ppvResult);
         HRESULT (  *BindToStorage )(
            IMoniker * This,
             IBindCtx *pbc,
             IMoniker *pmkToLeft,
             const IID * const riid,
             void **ppvObj);
        HRESULT (  *Reduce )(
            IMoniker * This,
              IBindCtx *pbc,
             DWORD dwReduceHowFar,
              IMoniker **ppmkToLeft,
              IMoniker **ppmkReduced);
        HRESULT (  *ComposeWith )(
            IMoniker * This,
              IMoniker *pmkRight,
             BOOL fOnlyIfNotGeneric,
              IMoniker **ppmkComposite);
        HRESULT (  *Enum )(
            IMoniker * This,
             BOOL fForward,
              IEnumMoniker **ppenumMoniker);
        HRESULT (  *IsEqual )(
            IMoniker * This,
              IMoniker *pmkOtherMoniker);
        HRESULT (  *Hash )(
            IMoniker * This,
              DWORD *pdwHash);
        HRESULT (  *IsRunning )(
            IMoniker * This,
              IBindCtx *pbc,
              IMoniker *pmkToLeft,
              IMoniker *pmkNewlyRunning);
        HRESULT (  *GetTimeOfLastChange )(
            IMoniker * This,
              IBindCtx *pbc,
              IMoniker *pmkToLeft,
              FILETIME *pFileTime);
        HRESULT (  *Inverse )(
            IMoniker * This,
              IMoniker **ppmk);
        HRESULT (  *CommonPrefixWith )(
            IMoniker * This,
              IMoniker *pmkOther,
              IMoniker **ppmkPrefix);
        HRESULT (  *RelativePathTo )(
            IMoniker * This,
              IMoniker *pmkOther,
              IMoniker **ppmkRelPath);
        HRESULT (  *GetDisplayName )(
            IMoniker * This,
              IBindCtx *pbc,
              IMoniker *pmkToLeft,
              LPOLESTR *ppszDisplayName);
        HRESULT (  *ParseDisplayName )(
            IMoniker * This,
              IBindCtx *pbc,
              IMoniker *pmkToLeft,
              LPOLESTR pszDisplayName,
              ULONG *pchEaten,
              IMoniker **ppmkOut);
        HRESULT (  *IsSystemMoniker )(
            IMoniker * This,
              DWORD *pdwMksys);
    } IMonikerVtbl;
    struct IMoniker
    {
         struct IMonikerVtbl *lpVtbl;
    };
 HRESULT  IMoniker_RemoteBindToObject_Proxy(
    IMoniker * This,
      IBindCtx *pbc,
      IMoniker *pmkToLeft,
      const IID * const riidResult,
      IUnknown **ppvResult);
void  IMoniker_RemoteBindToObject_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IMoniker_RemoteBindToStorage_Proxy(
    IMoniker * This,
      IBindCtx *pbc,
      IMoniker *pmkToLeft,
      const IID * const riid,
      IUnknown **ppvObj);
void  IMoniker_RemoteBindToStorage_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern const IID IID_IROTData;
    typedef struct IROTDataVtbl
    {
        HRESULT (  *QueryInterface )(
            IROTData * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IROTData * This);
        ULONG (  *Release )(
            IROTData * This);
        HRESULT (  *GetComparisonData )(
            IROTData * This,
              byte *pbData,
             ULONG cbMax,
              ULONG *pcbData);
    } IROTDataVtbl;
    struct IROTData
    {
         struct IROTDataVtbl *lpVtbl;
    };
typedef    IEnumString *LPENUMSTRING;
extern const IID IID_IEnumString;
    typedef struct IEnumStringVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumString * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumString * This);
        ULONG (  *Release )(
            IEnumString * This);
         HRESULT (  *Next )(
            IEnumString * This,
             ULONG celt,
              LPOLESTR *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumString * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumString * This);
        HRESULT (  *Clone )(
            IEnumString * This,
              IEnumString **ppenum);
    } IEnumStringVtbl;
    struct IEnumString
    {
         struct IEnumStringVtbl *lpVtbl;
    };
 HRESULT  IEnumString_RemoteNext_Proxy(
    IEnumString * This,
     ULONG celt,
      LPOLESTR *rgelt,
      ULONG *pceltFetched);
void  IEnumString_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern const IID IID_ISequentialStream;
    typedef struct ISequentialStreamVtbl
    {
        HRESULT (  *QueryInterface )(
            ISequentialStream * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISequentialStream * This);
        ULONG (  *Release )(
            ISequentialStream * This);
         HRESULT (  *Read )(
            ISequentialStream * This,
             void *pv,
             ULONG cb,
             ULONG *pcbRead);
         HRESULT (  *Write )(
            ISequentialStream * This,
             const void *pv,
             ULONG cb,
             ULONG *pcbWritten);
    } ISequentialStreamVtbl;
    struct ISequentialStream
    {
         struct ISequentialStreamVtbl *lpVtbl;
    };
 HRESULT  ISequentialStream_RemoteRead_Proxy(
    ISequentialStream * This,
      byte *pv,
     ULONG cb,
      ULONG *pcbRead);
void  ISequentialStream_RemoteRead_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ISequentialStream_RemoteWrite_Proxy(
    ISequentialStream * This,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
void  ISequentialStream_RemoteWrite_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IStream *LPSTREAM;
typedef struct tagSTATSTG
    {
    LPOLESTR pwcsName;
    DWORD type;
    ULARGE_INTEGER cbSize;
    FILETIME mtime;
    FILETIME ctime;
    FILETIME atime;
    DWORD grfMode;
    DWORD grfLocksSupported;
    CLSID clsid;
    DWORD grfStateBits;
    DWORD reserved;
    } 	STATSTG;
typedef
enum tagSTGTY
    {	STGTY_STORAGE	= 1,
	STGTY_STREAM	= 2,
	STGTY_LOCKBYTES	= 3,
	STGTY_PROPERTY	= 4
    } 	STGTY;
typedef
enum tagSTREAM_SEEK
    {	STREAM_SEEK_SET	= 0,
	STREAM_SEEK_CUR	= 1,
	STREAM_SEEK_END	= 2
    } 	STREAM_SEEK;
typedef
enum tagLOCKTYPE
    {	LOCK_WRITE	= 1,
	LOCK_EXCLUSIVE	= 2,
	LOCK_ONLYONCE	= 4
    } 	LOCKTYPE;
extern const IID IID_IStream;
    typedef struct IStreamVtbl
    {
        HRESULT (  *QueryInterface )(
            IStream * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IStream * This);
        ULONG (  *Release )(
            IStream * This);
         HRESULT (  *Read )(
            IStream * This,
             void *pv,
             ULONG cb,
             ULONG *pcbRead);
         HRESULT (  *Write )(
            IStream * This,
             const void *pv,
             ULONG cb,
             ULONG *pcbWritten);
         HRESULT (  *Seek )(
            IStream * This,
             LARGE_INTEGER dlibMove,
             DWORD dwOrigin,
             ULARGE_INTEGER *plibNewPosition);
        HRESULT (  *SetSize )(
            IStream * This,
             ULARGE_INTEGER libNewSize);
         HRESULT (  *CopyTo )(
            IStream * This,
             IStream *pstm,
             ULARGE_INTEGER cb,
             ULARGE_INTEGER *pcbRead,
             ULARGE_INTEGER *pcbWritten);
        HRESULT (  *Commit )(
            IStream * This,
             DWORD grfCommitFlags);
        HRESULT (  *Revert )(
            IStream * This);
        HRESULT (  *LockRegion )(
            IStream * This,
             ULARGE_INTEGER libOffset,
             ULARGE_INTEGER cb,
             DWORD dwLockType);
        HRESULT (  *UnlockRegion )(
            IStream * This,
             ULARGE_INTEGER libOffset,
             ULARGE_INTEGER cb,
             DWORD dwLockType);
        HRESULT (  *Stat )(
            IStream * This,
              STATSTG *pstatstg,
             DWORD grfStatFlag);
        HRESULT (  *Clone )(
            IStream * This,
              IStream **ppstm);
    } IStreamVtbl;
    struct IStream
    {
         struct IStreamVtbl *lpVtbl;
    };
 HRESULT  IStream_RemoteSeek_Proxy(
    IStream * This,
     LARGE_INTEGER dlibMove,
     DWORD dwOrigin,
      ULARGE_INTEGER *plibNewPosition);
void  IStream_RemoteSeek_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IStream_RemoteCopyTo_Proxy(
    IStream * This,
      IStream *pstm,
     ULARGE_INTEGER cb,
      ULARGE_INTEGER *pcbRead,
      ULARGE_INTEGER *pcbWritten);
void  IStream_RemoteCopyTo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumSTATSTG *LPENUMSTATSTG;
extern const IID IID_IEnumSTATSTG;
    typedef struct IEnumSTATSTGVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumSTATSTG * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumSTATSTG * This);
        ULONG (  *Release )(
            IEnumSTATSTG * This);
         HRESULT (  *Next )(
            IEnumSTATSTG * This,
             ULONG celt,
             STATSTG *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumSTATSTG * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumSTATSTG * This);
        HRESULT (  *Clone )(
            IEnumSTATSTG * This,
              IEnumSTATSTG **ppenum);
    } IEnumSTATSTGVtbl;
    struct IEnumSTATSTG
    {
         struct IEnumSTATSTGVtbl *lpVtbl;
    };
 HRESULT  IEnumSTATSTG_RemoteNext_Proxy(
    IEnumSTATSTG * This,
     ULONG celt,
      STATSTG *rgelt,
      ULONG *pceltFetched);
void  IEnumSTATSTG_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IStorage *LPSTORAGE;
typedef struct tagRemSNB
    {
    unsigned long ulCntStr;
    unsigned long ulCntChar;
    OLECHAR rgString[ 1 ];
    } 	RemSNB;
typedef    RemSNB *wireSNB;
typedef  OLECHAR **SNB;
extern const IID IID_IStorage;
    typedef struct IStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IStorage * This);
        ULONG (  *Release )(
            IStorage * This);
        HRESULT (  *CreateStream )(
            IStorage * This,
              const OLECHAR *pwcsName,
             DWORD grfMode,
             DWORD reserved1,
             DWORD reserved2,
              IStream **ppstm);
         HRESULT (  *OpenStream )(
            IStorage * This,
             const OLECHAR *pwcsName,
             void *reserved1,
             DWORD grfMode,
             DWORD reserved2,
             IStream **ppstm);
        HRESULT (  *CreateStorage )(
            IStorage * This,
              const OLECHAR *pwcsName,
             DWORD grfMode,
             DWORD reserved1,
             DWORD reserved2,
              IStorage **ppstg);
        HRESULT (  *OpenStorage )(
            IStorage * This,
              const OLECHAR *pwcsName,
              IStorage *pstgPriority,
             DWORD grfMode,
              SNB snbExclude,
             DWORD reserved,
              IStorage **ppstg);
         HRESULT (  *CopyTo )(
            IStorage * This,
             DWORD ciidExclude,
             const IID *rgiidExclude,
             SNB snbExclude,
             IStorage *pstgDest);
        HRESULT (  *MoveElementTo )(
            IStorage * This,
              const OLECHAR *pwcsName,
              IStorage *pstgDest,
              const OLECHAR *pwcsNewName,
             DWORD grfFlags);
        HRESULT (  *Commit )(
            IStorage * This,
             DWORD grfCommitFlags);
        HRESULT (  *Revert )(
            IStorage * This);
         HRESULT (  *EnumElements )(
            IStorage * This,
             DWORD reserved1,
             void *reserved2,
             DWORD reserved3,
             IEnumSTATSTG **ppenum);
        HRESULT (  *DestroyElement )(
            IStorage * This,
              const OLECHAR *pwcsName);
        HRESULT (  *RenameElement )(
            IStorage * This,
              const OLECHAR *pwcsOldName,
              const OLECHAR *pwcsNewName);
        HRESULT (  *SetElementTimes )(
            IStorage * This,
              const OLECHAR *pwcsName,
              const FILETIME *pctime,
              const FILETIME *patime,
              const FILETIME *pmtime);
        HRESULT (  *SetClass )(
            IStorage * This,
              const IID * const clsid);
        HRESULT (  *SetStateBits )(
            IStorage * This,
             DWORD grfStateBits,
             DWORD grfMask);
        HRESULT (  *Stat )(
            IStorage * This,
              STATSTG *pstatstg,
             DWORD grfStatFlag);
    } IStorageVtbl;
    struct IStorage
    {
         struct IStorageVtbl *lpVtbl;
    };
 HRESULT  IStorage_RemoteOpenStream_Proxy(
    IStorage * This,
      const OLECHAR *pwcsName,
     unsigned long cbReserved1,
      byte *reserved1,
     DWORD grfMode,
     DWORD reserved2,
      IStream **ppstm);
void  IStorage_RemoteOpenStream_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IStorage_RemoteCopyTo_Proxy(
    IStorage * This,
     DWORD ciidExclude,
      const IID *rgiidExclude,
      SNB snbExclude,
      IStorage *pstgDest);
void  IStorage_RemoteCopyTo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IStorage_RemoteEnumElements_Proxy(
    IStorage * This,
     DWORD reserved1,
     unsigned long cbReserved2,
      byte *reserved2,
     DWORD reserved3,
      IEnumSTATSTG **ppenum);
void  IStorage_RemoteEnumElements_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IPersistFile *LPPERSISTFILE;
extern const IID IID_IPersistFile;
    typedef struct IPersistFileVtbl
    {
        HRESULT (  *QueryInterface )(
            IPersistFile * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPersistFile * This);
        ULONG (  *Release )(
            IPersistFile * This);
        HRESULT (  *GetClassID )(
            IPersistFile * This,
              CLSID *pClassID);
        HRESULT (  *IsDirty )(
            IPersistFile * This);
        HRESULT (  *Load )(
            IPersistFile * This,
              LPCOLESTR pszFileName,
             DWORD dwMode);
        HRESULT (  *Save )(
            IPersistFile * This,
              LPCOLESTR pszFileName,
             BOOL fRemember);
        HRESULT (  *SaveCompleted )(
            IPersistFile * This,
              LPCOLESTR pszFileName);
        HRESULT (  *GetCurFile )(
            IPersistFile * This,
              LPOLESTR *ppszFileName);
    } IPersistFileVtbl;
    struct IPersistFile
    {
         struct IPersistFileVtbl *lpVtbl;
    };
typedef    IPersistStorage *LPPERSISTSTORAGE;
extern const IID IID_IPersistStorage;
    typedef struct IPersistStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IPersistStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPersistStorage * This);
        ULONG (  *Release )(
            IPersistStorage * This);
        HRESULT (  *GetClassID )(
            IPersistStorage * This,
              CLSID *pClassID);
        HRESULT (  *IsDirty )(
            IPersistStorage * This);
        HRESULT (  *InitNew )(
            IPersistStorage * This,
              IStorage *pStg);
        HRESULT (  *Load )(
            IPersistStorage * This,
              IStorage *pStg);
        HRESULT (  *Save )(
            IPersistStorage * This,
              IStorage *pStgSave,
             BOOL fSameAsLoad);
        HRESULT (  *SaveCompleted )(
            IPersistStorage * This,
              IStorage *pStgNew);
        HRESULT (  *HandsOffStorage )(
            IPersistStorage * This);
    } IPersistStorageVtbl;
    struct IPersistStorage
    {
         struct IPersistStorageVtbl *lpVtbl;
    };
typedef    ILockBytes *LPLOCKBYTES;
extern const IID IID_ILockBytes;
    typedef struct ILockBytesVtbl
    {
        HRESULT (  *QueryInterface )(
            ILockBytes * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ILockBytes * This);
        ULONG (  *Release )(
            ILockBytes * This);
         HRESULT (  *ReadAt )(
            ILockBytes * This,
             ULARGE_INTEGER ulOffset,
             void *pv,
             ULONG cb,
             ULONG *pcbRead);
         HRESULT (  *WriteAt )(
            ILockBytes * This,
             ULARGE_INTEGER ulOffset,
             const void *pv,
             ULONG cb,
             ULONG *pcbWritten);
        HRESULT (  *Flush )(
            ILockBytes * This);
        HRESULT (  *SetSize )(
            ILockBytes * This,
             ULARGE_INTEGER cb);
        HRESULT (  *LockRegion )(
            ILockBytes * This,
             ULARGE_INTEGER libOffset,
             ULARGE_INTEGER cb,
             DWORD dwLockType);
        HRESULT (  *UnlockRegion )(
            ILockBytes * This,
             ULARGE_INTEGER libOffset,
             ULARGE_INTEGER cb,
             DWORD dwLockType);
        HRESULT (  *Stat )(
            ILockBytes * This,
              STATSTG *pstatstg,
             DWORD grfStatFlag);
    } ILockBytesVtbl;
    struct ILockBytes
    {
         struct ILockBytesVtbl *lpVtbl;
    };
 HRESULT  ILockBytes_RemoteReadAt_Proxy(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
      byte *pv,
     ULONG cb,
      ULONG *pcbRead);
void  ILockBytes_RemoteReadAt_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ILockBytes_RemoteWriteAt_Proxy(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
void  ILockBytes_RemoteWriteAt_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumFORMATETC *LPENUMFORMATETC;
typedef struct tagDVTARGETDEVICE
    {
    DWORD tdSize;
    WORD tdDriverNameOffset;
    WORD tdDeviceNameOffset;
    WORD tdPortNameOffset;
    WORD tdExtDevmodeOffset;
    BYTE tdData[ 1 ];
    } 	DVTARGETDEVICE;
typedef CLIPFORMAT *LPCLIPFORMAT;
typedef struct tagFORMATETC
    {
    CLIPFORMAT cfFormat;
    DVTARGETDEVICE *ptd;
    DWORD dwAspect;
    LONG lindex;
    DWORD tymed;
    } 	FORMATETC;
typedef struct tagFORMATETC *LPFORMATETC;
extern const IID IID_IEnumFORMATETC;
    typedef struct IEnumFORMATETCVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumFORMATETC * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumFORMATETC * This);
        ULONG (  *Release )(
            IEnumFORMATETC * This);
         HRESULT (  *Next )(
            IEnumFORMATETC * This,
             ULONG celt,
             FORMATETC *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumFORMATETC * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumFORMATETC * This);
        HRESULT (  *Clone )(
            IEnumFORMATETC * This,
              IEnumFORMATETC **ppenum);
    } IEnumFORMATETCVtbl;
    struct IEnumFORMATETC
    {
         struct IEnumFORMATETCVtbl *lpVtbl;
    };
 HRESULT  IEnumFORMATETC_RemoteNext_Proxy(
    IEnumFORMATETC * This,
     ULONG celt,
      FORMATETC *rgelt,
      ULONG *pceltFetched);
void  IEnumFORMATETC_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumSTATDATA *LPENUMSTATDATA;
typedef
enum tagADVF
    {	ADVF_NODATA	= 1,
	ADVF_PRIMEFIRST	= 2,
	ADVF_ONLYONCE	= 4,
	ADVF_DATAONSTOP	= 64,
	ADVFCACHE_NOHANDLER	= 8,
	ADVFCACHE_FORCEBUILTIN	= 16,
	ADVFCACHE_ONSAVE	= 32
    } 	ADVF;
typedef struct tagSTATDATA
    {
    FORMATETC formatetc;
    DWORD advf;
    IAdviseSink *pAdvSink;
    DWORD dwConnection;
    } 	STATDATA;
typedef STATDATA *LPSTATDATA;
extern const IID IID_IEnumSTATDATA;
    typedef struct IEnumSTATDATAVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumSTATDATA * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumSTATDATA * This);
        ULONG (  *Release )(
            IEnumSTATDATA * This);
         HRESULT (  *Next )(
            IEnumSTATDATA * This,
             ULONG celt,
             STATDATA *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumSTATDATA * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumSTATDATA * This);
        HRESULT (  *Clone )(
            IEnumSTATDATA * This,
              IEnumSTATDATA **ppenum);
    } IEnumSTATDATAVtbl;
    struct IEnumSTATDATA
    {
         struct IEnumSTATDATAVtbl *lpVtbl;
    };
 HRESULT  IEnumSTATDATA_RemoteNext_Proxy(
    IEnumSTATDATA * This,
     ULONG celt,
      STATDATA *rgelt,
      ULONG *pceltFetched);
void  IEnumSTATDATA_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IRootStorage *LPROOTSTORAGE;
extern const IID IID_IRootStorage;
    typedef struct IRootStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IRootStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRootStorage * This);
        ULONG (  *Release )(
            IRootStorage * This);
        HRESULT (  *SwitchToFile )(
            IRootStorage * This,
              LPOLESTR pszFile);
    } IRootStorageVtbl;
    struct IRootStorage
    {
         struct IRootStorageVtbl *lpVtbl;
    };
typedef IAdviseSink *LPADVISESINK;
typedef
enum tagTYMED
    {	TYMED_HGLOBAL	= 1,
	TYMED_FILE	= 2,
	TYMED_ISTREAM	= 4,
	TYMED_ISTORAGE	= 8,
	TYMED_GDI	= 16,
	TYMED_MFPICT	= 32,
	TYMED_ENHMF	= 64,
	TYMED_NULL	= 0
    } 	TYMED;
typedef struct tagRemSTGMEDIUM
    {
    DWORD tymed;
    DWORD dwHandleType;
    unsigned long pData;
    unsigned long pUnkForRelease;
    unsigned long cbData;
    byte data[ 1 ];
    } 	RemSTGMEDIUM;
typedef struct tagSTGMEDIUM
    {
    DWORD tymed;
    union
        {
        HBITMAP hBitmap;
        HMETAFILEPICT hMetaFilePict;
        HENHMETAFILE hEnhMetaFile;
        HGLOBAL hGlobal;
        LPOLESTR lpszFileName;
        IStream *pstm;
        IStorage *pstg;
        } 	;
    IUnknown *pUnkForRelease;
    } 	uSTGMEDIUM;
typedef struct _GDI_OBJECT
    {
    DWORD ObjectType;
     union __MIDL_IAdviseSink_0002
        {
        wireHBITMAP hBitmap;
        wireHPALETTE hPalette;
        wireHGLOBAL hGeneric;
        } 	u;
    } 	GDI_OBJECT;
typedef struct _userSTGMEDIUM
    {
    struct _STGMEDIUM_UNION
        {
        DWORD tymed;
         union __MIDL_IAdviseSink_0003
            {
            wireHMETAFILEPICT hMetaFilePict;
            wireHENHMETAFILE hHEnhMetaFile;
            GDI_OBJECT *hGdiHandle;
            wireHGLOBAL hGlobal;
            LPOLESTR lpszFileName;
            BYTE_BLOB *pstm;
            BYTE_BLOB *pstg;
            } 	u;
        } 	;
    IUnknown *pUnkForRelease;
    } 	userSTGMEDIUM;
typedef    userSTGMEDIUM *wireSTGMEDIUM;
typedef  uSTGMEDIUM STGMEDIUM;
typedef    userSTGMEDIUM *wireASYNC_STGMEDIUM;
typedef  STGMEDIUM ASYNC_STGMEDIUM;
typedef STGMEDIUM *LPSTGMEDIUM;
typedef struct _userFLAG_STGMEDIUM
    {
    long ContextFlags;
    long fPassOwnership;
    userSTGMEDIUM Stgmed;
    } 	userFLAG_STGMEDIUM;
typedef    userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
typedef  struct _FLAG_STGMEDIUM
    {
    long ContextFlags;
    long fPassOwnership;
    STGMEDIUM Stgmed;
    } 	FLAG_STGMEDIUM;
extern const IID IID_IAdviseSink;
    typedef struct IAdviseSinkVtbl
    {
        HRESULT (  *QueryInterface )(
            IAdviseSink * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAdviseSink * This);
        ULONG (  *Release )(
            IAdviseSink * This);
         void (  *OnDataChange )(
            IAdviseSink * This,
             FORMATETC *pFormatetc,
             STGMEDIUM *pStgmed);
         void (  *OnViewChange )(
            IAdviseSink * This,
             DWORD dwAspect,
             LONG lindex);
         void (  *OnRename )(
            IAdviseSink * This,
             IMoniker *pmk);
         void (  *OnSave )(
            IAdviseSink * This);
         void (  *OnClose )(
            IAdviseSink * This);
    } IAdviseSinkVtbl;
    struct IAdviseSink
    {
         struct IAdviseSinkVtbl *lpVtbl;
    };
 HRESULT  IAdviseSink_RemoteOnDataChange_Proxy(
    IAdviseSink * This,
      FORMATETC *pFormatetc,
      ASYNC_STGMEDIUM *pStgmed);
void  IAdviseSink_RemoteOnDataChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IAdviseSink_RemoteOnViewChange_Proxy(
    IAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
void  IAdviseSink_RemoteOnViewChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IAdviseSink_RemoteOnRename_Proxy(
    IAdviseSink * This,
      IMoniker *pmk);
void  IAdviseSink_RemoteOnRename_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IAdviseSink_RemoteOnSave_Proxy(
    IAdviseSink * This);
void  IAdviseSink_RemoteOnSave_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IAdviseSink_RemoteOnClose_Proxy(
    IAdviseSink * This);
void  IAdviseSink_RemoteOnClose_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern const IID IID_AsyncIAdviseSink;
    typedef struct AsyncIAdviseSinkVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIAdviseSink * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIAdviseSink * This);
        ULONG (  *Release )(
            AsyncIAdviseSink * This);
         void (  *Begin_OnDataChange )(
            AsyncIAdviseSink * This,
             FORMATETC *pFormatetc,
             STGMEDIUM *pStgmed);
         void (  *Finish_OnDataChange )(
            AsyncIAdviseSink * This);
         void (  *Begin_OnViewChange )(
            AsyncIAdviseSink * This,
             DWORD dwAspect,
             LONG lindex);
         void (  *Finish_OnViewChange )(
            AsyncIAdviseSink * This);
         void (  *Begin_OnRename )(
            AsyncIAdviseSink * This,
             IMoniker *pmk);
         void (  *Finish_OnRename )(
            AsyncIAdviseSink * This);
         void (  *Begin_OnSave )(
            AsyncIAdviseSink * This);
         void (  *Finish_OnSave )(
            AsyncIAdviseSink * This);
         void (  *Begin_OnClose )(
            AsyncIAdviseSink * This);
         void (  *Finish_OnClose )(
            AsyncIAdviseSink * This);
    } AsyncIAdviseSinkVtbl;
    struct AsyncIAdviseSink
    {
         struct AsyncIAdviseSinkVtbl *lpVtbl;
    };
 HRESULT  AsyncIAdviseSink_Begin_RemoteOnDataChange_Proxy(
    AsyncIAdviseSink * This,
      FORMATETC *pFormatetc,
      ASYNC_STGMEDIUM *pStgmed);
void  AsyncIAdviseSink_Begin_RemoteOnDataChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Finish_RemoteOnDataChange_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Finish_RemoteOnDataChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Begin_RemoteOnViewChange_Proxy(
    AsyncIAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
void  AsyncIAdviseSink_Begin_RemoteOnViewChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Finish_RemoteOnViewChange_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Finish_RemoteOnViewChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Begin_RemoteOnRename_Proxy(
    AsyncIAdviseSink * This,
      IMoniker *pmk);
void  AsyncIAdviseSink_Begin_RemoteOnRename_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Finish_RemoteOnRename_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Finish_RemoteOnRename_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Begin_RemoteOnSave_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Begin_RemoteOnSave_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Finish_RemoteOnSave_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Finish_RemoteOnSave_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Begin_RemoteOnClose_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Begin_RemoteOnClose_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink_Finish_RemoteOnClose_Proxy(
    AsyncIAdviseSink * This);
void  AsyncIAdviseSink_Finish_RemoteOnClose_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IAdviseSink2 *LPADVISESINK2;
extern const IID IID_IAdviseSink2;
    typedef struct IAdviseSink2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IAdviseSink2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAdviseSink2 * This);
        ULONG (  *Release )(
            IAdviseSink2 * This);
         void (  *OnDataChange )(
            IAdviseSink2 * This,
             FORMATETC *pFormatetc,
             STGMEDIUM *pStgmed);
         void (  *OnViewChange )(
            IAdviseSink2 * This,
             DWORD dwAspect,
             LONG lindex);
         void (  *OnRename )(
            IAdviseSink2 * This,
             IMoniker *pmk);
         void (  *OnSave )(
            IAdviseSink2 * This);
         void (  *OnClose )(
            IAdviseSink2 * This);
         void (  *OnLinkSrcChange )(
            IAdviseSink2 * This,
             IMoniker *pmk);
    } IAdviseSink2Vtbl;
    struct IAdviseSink2
    {
         struct IAdviseSink2Vtbl *lpVtbl;
    };
 HRESULT  IAdviseSink2_RemoteOnLinkSrcChange_Proxy(
    IAdviseSink2 * This,
      IMoniker *pmk);
void  IAdviseSink2_RemoteOnLinkSrcChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern const IID IID_AsyncIAdviseSink2;
    typedef struct AsyncIAdviseSink2Vtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIAdviseSink2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIAdviseSink2 * This);
        ULONG (  *Release )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnDataChange )(
            AsyncIAdviseSink2 * This,
             FORMATETC *pFormatetc,
             STGMEDIUM *pStgmed);
         void (  *Finish_OnDataChange )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnViewChange )(
            AsyncIAdviseSink2 * This,
             DWORD dwAspect,
             LONG lindex);
         void (  *Finish_OnViewChange )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnRename )(
            AsyncIAdviseSink2 * This,
             IMoniker *pmk);
         void (  *Finish_OnRename )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnSave )(
            AsyncIAdviseSink2 * This);
         void (  *Finish_OnSave )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnClose )(
            AsyncIAdviseSink2 * This);
         void (  *Finish_OnClose )(
            AsyncIAdviseSink2 * This);
         void (  *Begin_OnLinkSrcChange )(
            AsyncIAdviseSink2 * This,
             IMoniker *pmk);
         void (  *Finish_OnLinkSrcChange )(
            AsyncIAdviseSink2 * This);
    } AsyncIAdviseSink2Vtbl;
    struct AsyncIAdviseSink2
    {
         struct AsyncIAdviseSink2Vtbl *lpVtbl;
    };
 HRESULT  AsyncIAdviseSink2_Begin_RemoteOnLinkSrcChange_Proxy(
    AsyncIAdviseSink2 * This,
      IMoniker *pmk);
void  AsyncIAdviseSink2_Begin_RemoteOnLinkSrcChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  AsyncIAdviseSink2_Finish_RemoteOnLinkSrcChange_Proxy(
    AsyncIAdviseSink2 * This);
void  AsyncIAdviseSink2_Finish_RemoteOnLinkSrcChange_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IDataObject *LPDATAOBJECT;
typedef
enum tagDATADIR
    {	DATADIR_GET	= 1,
	DATADIR_SET	= 2
    } 	DATADIR;
extern const IID IID_IDataObject;
    typedef struct IDataObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IDataObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDataObject * This);
        ULONG (  *Release )(
            IDataObject * This);
         HRESULT (  *GetData )(
            IDataObject * This,
             FORMATETC *pformatetcIn,
             STGMEDIUM *pmedium);
         HRESULT (  *GetDataHere )(
            IDataObject * This,
             FORMATETC *pformatetc,
             STGMEDIUM *pmedium);
        HRESULT (  *QueryGetData )(
            IDataObject * This,
              FORMATETC *pformatetc);
        HRESULT (  *GetCanonicalFormatEtc )(
            IDataObject * This,
              FORMATETC *pformatectIn,
              FORMATETC *pformatetcOut);
         HRESULT (  *SetData )(
            IDataObject * This,
             FORMATETC *pformatetc,
             STGMEDIUM *pmedium,
             BOOL fRelease);
        HRESULT (  *EnumFormatEtc )(
            IDataObject * This,
             DWORD dwDirection,
              IEnumFORMATETC **ppenumFormatEtc);
        HRESULT (  *DAdvise )(
            IDataObject * This,
              FORMATETC *pformatetc,
             DWORD advf,
              IAdviseSink *pAdvSink,
              DWORD *pdwConnection);
        HRESULT (  *DUnadvise )(
            IDataObject * This,
             DWORD dwConnection);
        HRESULT (  *EnumDAdvise )(
            IDataObject * This,
              IEnumSTATDATA **ppenumAdvise);
    } IDataObjectVtbl;
    struct IDataObject
    {
         struct IDataObjectVtbl *lpVtbl;
    };
 HRESULT  IDataObject_RemoteGetData_Proxy(
    IDataObject * This,
      FORMATETC *pformatetcIn,
      STGMEDIUM *pRemoteMedium);
void  IDataObject_RemoteGetData_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IDataObject_RemoteGetDataHere_Proxy(
    IDataObject * This,
      FORMATETC *pformatetc,
      STGMEDIUM *pRemoteMedium);
void  IDataObject_RemoteGetDataHere_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IDataObject_RemoteSetData_Proxy(
    IDataObject * This,
      FORMATETC *pformatetc,
      FLAG_STGMEDIUM *pmedium,
     BOOL fRelease);
void  IDataObject_RemoteSetData_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef  IDataAdviseHolder *LPDATAADVISEHOLDER;
extern const IID IID_IDataAdviseHolder;
    typedef struct IDataAdviseHolderVtbl
    {
        HRESULT (  *QueryInterface )(
            IDataAdviseHolder * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDataAdviseHolder * This);
        ULONG (  *Release )(
            IDataAdviseHolder * This);
        HRESULT (  *Advise )(
            IDataAdviseHolder * This,
             IDataObject *pDataObject,
             FORMATETC *pFetc,
             DWORD advf,
             IAdviseSink *pAdvise,
             DWORD *pdwConnection);
        HRESULT (  *Unadvise )(
            IDataAdviseHolder * This,
             DWORD dwConnection);
        HRESULT (  *EnumAdvise )(
            IDataAdviseHolder * This,
             IEnumSTATDATA **ppenumAdvise);
        HRESULT (  *SendOnDataChange )(
            IDataAdviseHolder * This,
             IDataObject *pDataObject,
             DWORD dwReserved,
             DWORD advf);
    } IDataAdviseHolderVtbl;
    struct IDataAdviseHolder
    {
         struct IDataAdviseHolderVtbl *lpVtbl;
    };
typedef  IMessageFilter *LPMESSAGEFILTER;
typedef
enum tagCALLTYPE
    {	CALLTYPE_TOPLEVEL	= 1,
	CALLTYPE_NESTED	= 2,
	CALLTYPE_ASYNC	= 3,
	CALLTYPE_TOPLEVEL_CALLPENDING	= 4,
	CALLTYPE_ASYNC_CALLPENDING	= 5
    } 	CALLTYPE;
typedef
enum tagSERVERCALL
    {	SERVERCALL_ISHANDLED	= 0,
	SERVERCALL_REJECTED	= 1,
	SERVERCALL_RETRYLATER	= 2
    } 	SERVERCALL;
typedef
enum tagPENDINGTYPE
    {	PENDINGTYPE_TOPLEVEL	= 1,
	PENDINGTYPE_NESTED	= 2
    } 	PENDINGTYPE;
typedef
enum tagPENDINGMSG
    {	PENDINGMSG_CANCELCALL	= 0,
	PENDINGMSG_WAITNOPROCESS	= 1,
	PENDINGMSG_WAITDEFPROCESS	= 2
    } 	PENDINGMSG;
typedef struct tagINTERFACEINFO
    {
    IUnknown *pUnk;
    IID iid;
    WORD wMethod;
    } 	INTERFACEINFO;
typedef struct tagINTERFACEINFO *LPINTERFACEINFO;
extern const IID IID_IMessageFilter;
    typedef struct IMessageFilterVtbl
    {
        HRESULT (  *QueryInterface )(
            IMessageFilter * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMessageFilter * This);
        ULONG (  *Release )(
            IMessageFilter * This);
        DWORD (  *HandleInComingCall )(
            IMessageFilter * This,
             DWORD dwCallType,
             HTASK htaskCaller,
             DWORD dwTickCount,
             LPINTERFACEINFO lpInterfaceInfo);
        DWORD (  *RetryRejectedCall )(
            IMessageFilter * This,
             HTASK htaskCallee,
             DWORD dwTickCount,
             DWORD dwRejectType);
        DWORD (  *MessagePending )(
            IMessageFilter * This,
             HTASK htaskCallee,
             DWORD dwTickCount,
             DWORD dwPendingType);
    } IMessageFilterVtbl;
    struct IMessageFilter
    {
         struct IMessageFilterVtbl *lpVtbl;
    };
typedef unsigned long RPCOLEDATAREP;
typedef struct tagRPCOLEMESSAGE
    {
    void *reserved1;
    RPCOLEDATAREP dataRepresentation;
    void *Buffer;
    ULONG cbBuffer;
    ULONG iMethod;
    void *reserved2[ 5 ];
    ULONG rpcFlags;
    } 	RPCOLEMESSAGE;
typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
extern const IID IID_IRpcChannelBuffer;
    typedef struct IRpcChannelBufferVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcChannelBuffer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcChannelBuffer * This);
        ULONG (  *Release )(
            IRpcChannelBuffer * This);
        HRESULT (  *GetBuffer )(
            IRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage,
             const IID * const riid);
        HRESULT (  *SendReceive )(
            IRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage,
             ULONG *pStatus);
        HRESULT (  *FreeBuffer )(
            IRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage);
        HRESULT (  *GetDestCtx )(
            IRpcChannelBuffer * This,
             DWORD *pdwDestContext,
             void **ppvDestContext);
        HRESULT (  *IsConnected )(
            IRpcChannelBuffer * This);
    } IRpcChannelBufferVtbl;
    struct IRpcChannelBuffer
    {
         struct IRpcChannelBufferVtbl *lpVtbl;
    };
extern const IID IID_IRpcChannelBuffer2;
    typedef struct IRpcChannelBuffer2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcChannelBuffer2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcChannelBuffer2 * This);
        ULONG (  *Release )(
            IRpcChannelBuffer2 * This);
        HRESULT (  *GetBuffer )(
            IRpcChannelBuffer2 * This,
             RPCOLEMESSAGE *pMessage,
             const IID * const riid);
        HRESULT (  *SendReceive )(
            IRpcChannelBuffer2 * This,
             RPCOLEMESSAGE *pMessage,
             ULONG *pStatus);
        HRESULT (  *FreeBuffer )(
            IRpcChannelBuffer2 * This,
             RPCOLEMESSAGE *pMessage);
        HRESULT (  *GetDestCtx )(
            IRpcChannelBuffer2 * This,
             DWORD *pdwDestContext,
             void **ppvDestContext);
        HRESULT (  *IsConnected )(
            IRpcChannelBuffer2 * This);
        HRESULT (  *GetProtocolVersion )(
            IRpcChannelBuffer2 * This,
             DWORD *pdwVersion);
    } IRpcChannelBuffer2Vtbl;
    struct IRpcChannelBuffer2
    {
         struct IRpcChannelBuffer2Vtbl *lpVtbl;
    };
extern const IID IID_IAsyncRpcChannelBuffer;
    typedef struct IAsyncRpcChannelBufferVtbl
    {
        HRESULT (  *QueryInterface )(
            IAsyncRpcChannelBuffer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAsyncRpcChannelBuffer * This);
        ULONG (  *Release )(
            IAsyncRpcChannelBuffer * This);
        HRESULT (  *GetBuffer )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage,
             const IID * const riid);
        HRESULT (  *SendReceive )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage,
             ULONG *pStatus);
        HRESULT (  *FreeBuffer )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMessage);
        HRESULT (  *GetDestCtx )(
            IAsyncRpcChannelBuffer * This,
             DWORD *pdwDestContext,
             void **ppvDestContext);
        HRESULT (  *IsConnected )(
            IAsyncRpcChannelBuffer * This);
        HRESULT (  *GetProtocolVersion )(
            IAsyncRpcChannelBuffer * This,
             DWORD *pdwVersion);
        HRESULT (  *Send )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMsg,
             ISynchronize *pSync,
             ULONG *pulStatus);
        HRESULT (  *Receive )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMsg,
             ULONG *pulStatus);
        HRESULT (  *GetDestCtxEx )(
            IAsyncRpcChannelBuffer * This,
             RPCOLEMESSAGE *pMsg,
             DWORD *pdwDestContext,
             void **ppvDestContext);
    } IAsyncRpcChannelBufferVtbl;
    struct IAsyncRpcChannelBuffer
    {
         struct IAsyncRpcChannelBufferVtbl *lpVtbl;
    };
extern const IID IID_IRpcChannelBuffer3;
    typedef struct IRpcChannelBuffer3Vtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcChannelBuffer3 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcChannelBuffer3 * This);
        ULONG (  *Release )(
            IRpcChannelBuffer3 * This);
        HRESULT (  *GetBuffer )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMessage,
             const IID * const riid);
        HRESULT (  *SendReceive )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMessage,
             ULONG *pStatus);
        HRESULT (  *FreeBuffer )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMessage);
        HRESULT (  *GetDestCtx )(
            IRpcChannelBuffer3 * This,
             DWORD *pdwDestContext,
             void **ppvDestContext);
        HRESULT (  *IsConnected )(
            IRpcChannelBuffer3 * This);
        HRESULT (  *GetProtocolVersion )(
            IRpcChannelBuffer3 * This,
             DWORD *pdwVersion);
        HRESULT (  *Send )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             ULONG *pulStatus);
        HRESULT (  *Receive )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             ULONG ulSize,
             ULONG *pulStatus);
        HRESULT (  *Cancel )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg);
        HRESULT (  *GetCallContext )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             const IID * const riid,
             void **pInterface);
        HRESULT (  *GetDestCtxEx )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             DWORD *pdwDestContext,
             void **ppvDestContext);
        HRESULT (  *GetState )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             DWORD *pState);
        HRESULT (  *RegisterAsync )(
            IRpcChannelBuffer3 * This,
             RPCOLEMESSAGE *pMsg,
             IAsyncManager *pAsyncMgr);
    } IRpcChannelBuffer3Vtbl;
    struct IRpcChannelBuffer3
    {
         struct IRpcChannelBuffer3Vtbl *lpVtbl;
    };
extern const IID IID_IRpcSyntaxNegotiate;
    typedef struct IRpcSyntaxNegotiateVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcSyntaxNegotiate * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcSyntaxNegotiate * This);
        ULONG (  *Release )(
            IRpcSyntaxNegotiate * This);
        HRESULT (  *NegotiateSyntax )(
            IRpcSyntaxNegotiate * This,
             RPCOLEMESSAGE *pMsg);
    } IRpcSyntaxNegotiateVtbl;
    struct IRpcSyntaxNegotiate
    {
         struct IRpcSyntaxNegotiateVtbl *lpVtbl;
    };
extern const IID IID_IRpcProxyBuffer;
    typedef struct IRpcProxyBufferVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcProxyBuffer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcProxyBuffer * This);
        ULONG (  *Release )(
            IRpcProxyBuffer * This);
        HRESULT (  *Connect )(
            IRpcProxyBuffer * This,
             IRpcChannelBuffer *pRpcChannelBuffer);
        void (  *Disconnect )(
            IRpcProxyBuffer * This);
    } IRpcProxyBufferVtbl;
    struct IRpcProxyBuffer
    {
         struct IRpcProxyBufferVtbl *lpVtbl;
    };
extern const IID IID_IRpcStubBuffer;
    typedef struct IRpcStubBufferVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcStubBuffer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcStubBuffer * This);
        ULONG (  *Release )(
            IRpcStubBuffer * This);
        HRESULT (  *Connect )(
            IRpcStubBuffer * This,
             IUnknown *pUnkServer);
        void (  *Disconnect )(
            IRpcStubBuffer * This);
        HRESULT (  *Invoke )(
            IRpcStubBuffer * This,
             RPCOLEMESSAGE *_prpcmsg,
             IRpcChannelBuffer *_pRpcChannelBuffer);
        IRpcStubBuffer *(  *IsIIDSupported )(
            IRpcStubBuffer * This,
             const IID * const riid);
        ULONG (  *CountRefs )(
            IRpcStubBuffer * This);
        HRESULT (  *DebugServerQueryInterface )(
            IRpcStubBuffer * This,
            void **ppv);
        void (  *DebugServerRelease )(
            IRpcStubBuffer * This,
            void *pv);
    } IRpcStubBufferVtbl;
    struct IRpcStubBuffer
    {
         struct IRpcStubBufferVtbl *lpVtbl;
    };
extern const IID IID_IPSFactoryBuffer;
    typedef struct IPSFactoryBufferVtbl
    {
        HRESULT (  *QueryInterface )(
            IPSFactoryBuffer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPSFactoryBuffer * This);
        ULONG (  *Release )(
            IPSFactoryBuffer * This);
        HRESULT (  *CreateProxy )(
            IPSFactoryBuffer * This,
             IUnknown *pUnkOuter,
             const IID * const riid,
             IRpcProxyBuffer **ppProxy,
             void **ppv);
        HRESULT (  *CreateStub )(
            IPSFactoryBuffer * This,
             const IID * const riid,
             IUnknown *pUnkServer,
             IRpcStubBuffer **ppStub);
    } IPSFactoryBufferVtbl;
    struct IPSFactoryBuffer
    {
         struct IPSFactoryBufferVtbl *lpVtbl;
    };
typedef struct SChannelHookCallInfo
    {
    IID iid;
    DWORD cbSize;
    GUID uCausality;
    DWORD dwServerPid;
    DWORD iMethod;
    void *pObject;
    } 	SChannelHookCallInfo;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0041_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0041_v0_0_s_ifspec;
extern const IID IID_IChannelHook;
    typedef struct IChannelHookVtbl
    {
        HRESULT (  *QueryInterface )(
            IChannelHook * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IChannelHook * This);
        ULONG (  *Release )(
            IChannelHook * This);
        void (  *ClientGetSize )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             ULONG *pDataSize);
        void (  *ClientFillBuffer )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             ULONG *pDataSize,
             void *pDataBuffer);
        void (  *ClientNotify )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             ULONG cbDataSize,
             void *pDataBuffer,
             DWORD lDataRep,
             HRESULT hrFault);
        void (  *ServerNotify )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             ULONG cbDataSize,
             void *pDataBuffer,
             DWORD lDataRep);
        void (  *ServerGetSize )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             HRESULT hrFault,
             ULONG *pDataSize);
        void (  *ServerFillBuffer )(
            IChannelHook * This,
             const GUID * const uExtent,
             const IID * const riid,
             ULONG *pDataSize,
             void *pDataBuffer,
             HRESULT hrFault);
    } IChannelHookVtbl;
    struct IChannelHook
    {
         struct IChannelHookVtbl *lpVtbl;
    };
extern const FMTID FMTID_SummaryInformation;
extern const FMTID FMTID_DocSummaryInformation;
extern const FMTID FMTID_UserDefinedProperties;
extern const FMTID FMTID_DiscardableInformation;
extern const FMTID FMTID_ImageSummaryInformation;
extern const FMTID FMTID_AudioSummaryInformation;
extern const FMTID FMTID_VideoSummaryInformation;
extern const FMTID FMTID_MediaFileSummaryInformation;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0042_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0042_v0_0_s_ifspec;
typedef struct tagSOLE_AUTHENTICATION_SERVICE
    {
    DWORD dwAuthnSvc;
    DWORD dwAuthzSvc;
    OLECHAR *pPrincipalName;
    HRESULT hr;
    } 	SOLE_AUTHENTICATION_SERVICE;
typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
typedef
enum tagEOLE_AUTHENTICATION_CAPABILITIES
    {	EOAC_NONE	= 0,
	EOAC_MUTUAL_AUTH	= 0x1,
	EOAC_STATIC_CLOAKING	= 0x20,
	EOAC_DYNAMIC_CLOAKING	= 0x40,
	EOAC_ANY_AUTHORITY	= 0x80,
	EOAC_MAKE_FULLSIC	= 0x100,
	EOAC_DEFAULT	= 0x800,
	EOAC_SECURE_REFS	= 0x2,
	EOAC_ACCESS_CONTROL	= 0x4,
	EOAC_APPID	= 0x8,
	EOAC_DYNAMIC	= 0x10,
	EOAC_REQUIRE_FULLSIC	= 0x200,
	EOAC_AUTO_IMPERSONATE	= 0x400,
	EOAC_NO_CUSTOM_MARSHAL	= 0x2000,
	EOAC_DISABLE_AAA	= 0x1000
    } 	EOLE_AUTHENTICATION_CAPABILITIES;
typedef struct tagSOLE_AUTHENTICATION_INFO
    {
    DWORD dwAuthnSvc;
    DWORD dwAuthzSvc;
    void *pAuthInfo;
    } 	SOLE_AUTHENTICATION_INFO;
typedef struct tagSOLE_AUTHENTICATION_INFO *PSOLE_AUTHENTICATION_INFO;
typedef struct tagSOLE_AUTHENTICATION_LIST
    {
    DWORD cAuthInfo;
    SOLE_AUTHENTICATION_INFO *aAuthInfo;
    } 	SOLE_AUTHENTICATION_LIST;
typedef struct tagSOLE_AUTHENTICATION_LIST *PSOLE_AUTHENTICATION_LIST;
extern const IID IID_IClientSecurity;
    typedef struct IClientSecurityVtbl
    {
        HRESULT (  *QueryInterface )(
            IClientSecurity * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IClientSecurity * This);
        ULONG (  *Release )(
            IClientSecurity * This);
        HRESULT (  *QueryBlanket )(
            IClientSecurity * This,
             IUnknown *pProxy,
             DWORD *pAuthnSvc,
             DWORD *pAuthzSvc,
              OLECHAR **pServerPrincName,
             DWORD *pAuthnLevel,
             DWORD *pImpLevel,
             void **pAuthInfo,
             DWORD *pCapabilites);
        HRESULT (  *SetBlanket )(
            IClientSecurity * This,
             IUnknown *pProxy,
             DWORD dwAuthnSvc,
             DWORD dwAuthzSvc,
              OLECHAR *pServerPrincName,
             DWORD dwAuthnLevel,
             DWORD dwImpLevel,
             void *pAuthInfo,
             DWORD dwCapabilities);
        HRESULT (  *CopyProxy )(
            IClientSecurity * This,
             IUnknown *pProxy,
             IUnknown **ppCopy);
    } IClientSecurityVtbl;
    struct IClientSecurity
    {
         struct IClientSecurityVtbl *lpVtbl;
    };
extern const IID IID_IServerSecurity;
    typedef struct IServerSecurityVtbl
    {
        HRESULT (  *QueryInterface )(
            IServerSecurity * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IServerSecurity * This);
        ULONG (  *Release )(
            IServerSecurity * This);
        HRESULT (  *QueryBlanket )(
            IServerSecurity * This,
             DWORD *pAuthnSvc,
             DWORD *pAuthzSvc,
              OLECHAR **pServerPrincName,
             DWORD *pAuthnLevel,
             DWORD *pImpLevel,
             void **pPrivs,
             DWORD *pCapabilities);
        HRESULT (  *ImpersonateClient )(
            IServerSecurity * This);
        HRESULT (  *RevertToSelf )(
            IServerSecurity * This);
        BOOL (  *IsImpersonating )(
            IServerSecurity * This);
    } IServerSecurityVtbl;
    struct IServerSecurity
    {
         struct IServerSecurityVtbl *lpVtbl;
    };
extern const IID IID_IClassActivator;
    typedef struct IClassActivatorVtbl
    {
        HRESULT (  *QueryInterface )(
            IClassActivator * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IClassActivator * This);
        ULONG (  *Release )(
            IClassActivator * This);
        HRESULT (  *GetClassObject )(
            IClassActivator * This,
              const IID * const rclsid,
             DWORD dwClassContext,
             LCID locale,
              const IID * const riid,
              void **ppv);
    } IClassActivatorVtbl;
    struct IClassActivator
    {
         struct IClassActivatorVtbl *lpVtbl;
    };
extern const IID IID_IRpcOptions;
    typedef struct IRpcOptionsVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcOptions * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcOptions * This);
        ULONG (  *Release )(
            IRpcOptions * This);
        HRESULT (  *Set )(
            IRpcOptions * This,
             IUnknown *pPrx,
             DWORD dwProperty,
             ULONG_PTR dwValue);
        HRESULT (  *Query )(
            IRpcOptions * This,
             IUnknown *pPrx,
             DWORD dwProperty,
             ULONG_PTR *pdwValue);
    } IRpcOptionsVtbl;
    struct IRpcOptions
    {
         struct IRpcOptionsVtbl *lpVtbl;
    };
enum __MIDL___MIDL_itf_objidl_0000_0046_0001
    {	COMBND_RPCTIMEOUT	= 0x1,
	COMBND_SERVER_LOCALITY	= 0x2
    } ;
enum __MIDL___MIDL_itf_objidl_0000_0046_0002
    {	SERVER_LOCALITY_PROCESS_LOCAL	= 0,
	SERVER_LOCALITY_MACHINE_LOCAL	= 1,
	SERVER_LOCALITY_REMOTE	= 2
    } ;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0046_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0046_v0_0_s_ifspec;
extern const IID IID_IFillLockBytes;
    typedef struct IFillLockBytesVtbl
    {
        HRESULT (  *QueryInterface )(
            IFillLockBytes * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IFillLockBytes * This);
        ULONG (  *Release )(
            IFillLockBytes * This);
         HRESULT (  *FillAppend )(
            IFillLockBytes * This,
             const void *pv,
             ULONG cb,
             ULONG *pcbWritten);
         HRESULT (  *FillAt )(
            IFillLockBytes * This,
             ULARGE_INTEGER ulOffset,
             const void *pv,
             ULONG cb,
             ULONG *pcbWritten);
        HRESULT (  *SetFillSize )(
            IFillLockBytes * This,
             ULARGE_INTEGER ulSize);
        HRESULT (  *Terminate )(
            IFillLockBytes * This,
             BOOL bCanceled);
    } IFillLockBytesVtbl;
    struct IFillLockBytes
    {
         struct IFillLockBytesVtbl *lpVtbl;
    };
 HRESULT  IFillLockBytes_RemoteFillAppend_Proxy(
    IFillLockBytes * This,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
void  IFillLockBytes_RemoteFillAppend_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IFillLockBytes_RemoteFillAt_Proxy(
    IFillLockBytes * This,
     ULARGE_INTEGER ulOffset,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
void  IFillLockBytes_RemoteFillAt_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern const IID IID_IProgressNotify;
    typedef struct IProgressNotifyVtbl
    {
        HRESULT (  *QueryInterface )(
            IProgressNotify * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IProgressNotify * This);
        ULONG (  *Release )(
            IProgressNotify * This);
        HRESULT (  *OnProgress )(
            IProgressNotify * This,
             DWORD dwProgressCurrent,
             DWORD dwProgressMaximum,
             BOOL fAccurate,
             BOOL fOwner);
    } IProgressNotifyVtbl;
    struct IProgressNotify
    {
         struct IProgressNotifyVtbl *lpVtbl;
    };
typedef struct tagStorageLayout
    {
    DWORD LayoutType;
    OLECHAR *pwcsElementName;
    LARGE_INTEGER cOffset;
    LARGE_INTEGER cBytes;
    } 	StorageLayout;
extern const IID IID_ILayoutStorage;
    typedef struct ILayoutStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            ILayoutStorage * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ILayoutStorage * This);
        ULONG (  *Release )(
            ILayoutStorage * This);
        HRESULT (  *LayoutScript )(
            ILayoutStorage * This,
             StorageLayout *pStorageLayout,
             DWORD nEntries,
             DWORD glfInterleavedFlag);
        HRESULT (  *BeginMonitor )(
            ILayoutStorage * This);
        HRESULT (  *EndMonitor )(
            ILayoutStorage * This);
        HRESULT (  *ReLayoutDocfile )(
            ILayoutStorage * This,
              OLECHAR *pwcsNewDfName);
        HRESULT (  *ReLayoutDocfileOnILockBytes )(
            ILayoutStorage * This,
             ILockBytes *pILockBytes);
    } ILayoutStorageVtbl;
    struct ILayoutStorage
    {
         struct ILayoutStorageVtbl *lpVtbl;
    };
extern const IID IID_IBlockingLock;
    typedef struct IBlockingLockVtbl
    {
        HRESULT (  *QueryInterface )(
            IBlockingLock * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBlockingLock * This);
        ULONG (  *Release )(
            IBlockingLock * This);
        HRESULT (  *Lock )(
            IBlockingLock * This,
             DWORD dwTimeout);
        HRESULT (  *Unlock )(
            IBlockingLock * This);
    } IBlockingLockVtbl;
    struct IBlockingLock
    {
         struct IBlockingLockVtbl *lpVtbl;
    };
extern const IID IID_ITimeAndNoticeControl;
    typedef struct ITimeAndNoticeControlVtbl
    {
        HRESULT (  *QueryInterface )(
            ITimeAndNoticeControl * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITimeAndNoticeControl * This);
        ULONG (  *Release )(
            ITimeAndNoticeControl * This);
        HRESULT (  *SuppressChanges )(
            ITimeAndNoticeControl * This,
             DWORD res1,
             DWORD res2);
    } ITimeAndNoticeControlVtbl;
    struct ITimeAndNoticeControl
    {
         struct ITimeAndNoticeControlVtbl *lpVtbl;
    };
extern const IID IID_IOplockStorage;
    typedef struct IOplockStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IOplockStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOplockStorage * This);
        ULONG (  *Release )(
            IOplockStorage * This);
        HRESULT (  *CreateStorageEx )(
            IOplockStorage * This,
              LPCWSTR pwcsName,
             DWORD grfMode,
             DWORD stgfmt,
             DWORD grfAttrs,
              const IID * const riid,
              void **ppstgOpen);
        HRESULT (  *OpenStorageEx )(
            IOplockStorage * This,
              LPCWSTR pwcsName,
             DWORD grfMode,
             DWORD stgfmt,
             DWORD grfAttrs,
              const IID * const riid,
              void **ppstgOpen);
    } IOplockStorageVtbl;
    struct IOplockStorage
    {
         struct IOplockStorageVtbl *lpVtbl;
    };
typedef    ISurrogate *LPSURROGATE;
extern const IID IID_ISurrogate;
    typedef struct ISurrogateVtbl
    {
        HRESULT (  *QueryInterface )(
            ISurrogate * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISurrogate * This);
        ULONG (  *Release )(
            ISurrogate * This);
        HRESULT (  *LoadDllServer )(
            ISurrogate * This,
              const IID * const Clsid);
        HRESULT (  *FreeSurrogate )(
            ISurrogate * This);
    } ISurrogateVtbl;
    struct ISurrogate
    {
         struct ISurrogateVtbl *lpVtbl;
    };
typedef  IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
extern const IID IID_IGlobalInterfaceTable;
    typedef struct IGlobalInterfaceTableVtbl
    {
        HRESULT (  *QueryInterface )(
            IGlobalInterfaceTable * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IGlobalInterfaceTable * This);
        ULONG (  *Release )(
            IGlobalInterfaceTable * This);
        HRESULT (  *RegisterInterfaceInGlobal )(
            IGlobalInterfaceTable * This,
             IUnknown *pUnk,
             const IID * const riid,
             DWORD *pdwCookie);
        HRESULT (  *RevokeInterfaceFromGlobal )(
            IGlobalInterfaceTable * This,
             DWORD dwCookie);
        HRESULT (  *GetInterfaceFromGlobal )(
            IGlobalInterfaceTable * This,
             DWORD dwCookie,
             const IID * const riid,
             void **ppv);
    } IGlobalInterfaceTableVtbl;
    struct IGlobalInterfaceTable
    {
         struct IGlobalInterfaceTableVtbl *lpVtbl;
    };
extern const IID IID_IDirectWriterLock;
    typedef struct IDirectWriterLockVtbl
    {
        HRESULT (  *QueryInterface )(
            IDirectWriterLock * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDirectWriterLock * This);
        ULONG (  *Release )(
            IDirectWriterLock * This);
        HRESULT (  *WaitForWriteAccess )(
            IDirectWriterLock * This,
             DWORD dwTimeout);
        HRESULT (  *ReleaseWriteAccess )(
            IDirectWriterLock * This);
        HRESULT (  *HaveWriteAccess )(
            IDirectWriterLock * This);
    } IDirectWriterLockVtbl;
    struct IDirectWriterLock
    {
         struct IDirectWriterLockVtbl *lpVtbl;
    };
extern const IID IID_ISynchronize;
    typedef struct ISynchronizeVtbl
    {
        HRESULT (  *QueryInterface )(
            ISynchronize * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISynchronize * This);
        ULONG (  *Release )(
            ISynchronize * This);
        HRESULT (  *Wait )(
            ISynchronize * This,
             DWORD dwFlags,
             DWORD dwMilliseconds);
        HRESULT (  *Signal )(
            ISynchronize * This);
        HRESULT (  *Reset )(
            ISynchronize * This);
    } ISynchronizeVtbl;
    struct ISynchronize
    {
         struct ISynchronizeVtbl *lpVtbl;
    };
extern const IID IID_ISynchronizeHandle;
    typedef struct ISynchronizeHandleVtbl
    {
        HRESULT (  *QueryInterface )(
            ISynchronizeHandle * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISynchronizeHandle * This);
        ULONG (  *Release )(
            ISynchronizeHandle * This);
        HRESULT (  *GetHandle )(
            ISynchronizeHandle * This,
             HANDLE *ph);
    } ISynchronizeHandleVtbl;
    struct ISynchronizeHandle
    {
         struct ISynchronizeHandleVtbl *lpVtbl;
    };
extern const IID IID_ISynchronizeEvent;
    typedef struct ISynchronizeEventVtbl
    {
        HRESULT (  *QueryInterface )(
            ISynchronizeEvent * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISynchronizeEvent * This);
        ULONG (  *Release )(
            ISynchronizeEvent * This);
        HRESULT (  *GetHandle )(
            ISynchronizeEvent * This,
             HANDLE *ph);
        HRESULT (  *SetEventHandle )(
            ISynchronizeEvent * This,
             HANDLE *ph);
    } ISynchronizeEventVtbl;
    struct ISynchronizeEvent
    {
         struct ISynchronizeEventVtbl *lpVtbl;
    };
extern const IID IID_ISynchronizeContainer;
    typedef struct ISynchronizeContainerVtbl
    {
        HRESULT (  *QueryInterface )(
            ISynchronizeContainer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISynchronizeContainer * This);
        ULONG (  *Release )(
            ISynchronizeContainer * This);
        HRESULT (  *AddSynchronize )(
            ISynchronizeContainer * This,
             ISynchronize *pSync);
        HRESULT (  *WaitMultiple )(
            ISynchronizeContainer * This,
             DWORD dwFlags,
             DWORD dwTimeOut,
             ISynchronize **ppSync);
    } ISynchronizeContainerVtbl;
    struct ISynchronizeContainer
    {
         struct ISynchronizeContainerVtbl *lpVtbl;
    };
extern const IID IID_ISynchronizeMutex;
    typedef struct ISynchronizeMutexVtbl
    {
        HRESULT (  *QueryInterface )(
            ISynchronizeMutex * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISynchronizeMutex * This);
        ULONG (  *Release )(
            ISynchronizeMutex * This);
        HRESULT (  *Wait )(
            ISynchronizeMutex * This,
             DWORD dwFlags,
             DWORD dwMilliseconds);
        HRESULT (  *Signal )(
            ISynchronizeMutex * This);
        HRESULT (  *Reset )(
            ISynchronizeMutex * This);
        HRESULT (  *ReleaseMutex )(
            ISynchronizeMutex * This);
    } ISynchronizeMutexVtbl;
    struct ISynchronizeMutex
    {
         struct ISynchronizeMutexVtbl *lpVtbl;
    };
typedef  ICancelMethodCalls *LPCANCELMETHODCALLS;
extern const IID IID_ICancelMethodCalls;
    typedef struct ICancelMethodCallsVtbl
    {
        HRESULT (  *QueryInterface )(
            ICancelMethodCalls * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICancelMethodCalls * This);
        ULONG (  *Release )(
            ICancelMethodCalls * This);
        HRESULT (  *Cancel )(
            ICancelMethodCalls * This,
             ULONG ulSeconds);
        HRESULT (  *TestCancel )(
            ICancelMethodCalls * This);
    } ICancelMethodCallsVtbl;
    struct ICancelMethodCalls
    {
         struct ICancelMethodCallsVtbl *lpVtbl;
    };
typedef
enum tagDCOM_CALL_STATE
    {	DCOM_NONE	= 0,
	DCOM_CALL_COMPLETE	= 0x1,
	DCOM_CALL_CANCELED	= 0x2
    } 	DCOM_CALL_STATE;
extern const IID IID_IAsyncManager;
    typedef struct IAsyncManagerVtbl
    {
        HRESULT (  *QueryInterface )(
            IAsyncManager * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAsyncManager * This);
        ULONG (  *Release )(
            IAsyncManager * This);
        HRESULT (  *CompleteCall )(
            IAsyncManager * This,
             HRESULT Result);
        HRESULT (  *GetCallContext )(
            IAsyncManager * This,
             const IID * const riid,
             void **pInterface);
        HRESULT (  *GetState )(
            IAsyncManager * This,
             ULONG *pulStateFlags);
    } IAsyncManagerVtbl;
    struct IAsyncManager
    {
         struct IAsyncManagerVtbl *lpVtbl;
    };
extern const IID IID_ICallFactory;
    typedef struct ICallFactoryVtbl
    {
        HRESULT (  *QueryInterface )(
            ICallFactory * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICallFactory * This);
        ULONG (  *Release )(
            ICallFactory * This);
        HRESULT (  *CreateCall )(
            ICallFactory * This,
             const IID * const riid,
             IUnknown *pCtrlUnk,
             const IID * const riid2,
             IUnknown **ppv);
    } ICallFactoryVtbl;
    struct ICallFactory
    {
         struct ICallFactoryVtbl *lpVtbl;
    };
extern const IID IID_IRpcHelper;
    typedef struct IRpcHelperVtbl
    {
        HRESULT (  *QueryInterface )(
            IRpcHelper * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRpcHelper * This);
        ULONG (  *Release )(
            IRpcHelper * This);
        HRESULT (  *GetDCOMProtocolVersion )(
            IRpcHelper * This,
             DWORD *pComVersion);
        HRESULT (  *GetIIDFromOBJREF )(
            IRpcHelper * This,
             void *pObjRef,
             IID **piid);
    } IRpcHelperVtbl;
    struct IRpcHelper
    {
         struct IRpcHelperVtbl *lpVtbl;
    };
extern const IID IID_IReleaseMarshalBuffers;
    typedef struct IReleaseMarshalBuffersVtbl
    {
        HRESULT (  *QueryInterface )(
            IReleaseMarshalBuffers * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IReleaseMarshalBuffers * This);
        ULONG (  *Release )(
            IReleaseMarshalBuffers * This);
        HRESULT (  *ReleaseMarshalBuffer )(
            IReleaseMarshalBuffers * This,
             RPCOLEMESSAGE *pMsg,
             DWORD dwFlags,
             IUnknown *pChnl);
    } IReleaseMarshalBuffersVtbl;
    struct IReleaseMarshalBuffers
    {
         struct IReleaseMarshalBuffersVtbl *lpVtbl;
    };
extern const IID IID_IWaitMultiple;
    typedef struct IWaitMultipleVtbl
    {
        HRESULT (  *QueryInterface )(
            IWaitMultiple * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWaitMultiple * This);
        ULONG (  *Release )(
            IWaitMultiple * This);
        HRESULT (  *WaitMultiple )(
            IWaitMultiple * This,
             DWORD timeout,
             ISynchronize **pSync);
        HRESULT (  *AddSynchronize )(
            IWaitMultiple * This,
             ISynchronize *pSync);
    } IWaitMultipleVtbl;
    struct IWaitMultiple
    {
         struct IWaitMultipleVtbl *lpVtbl;
    };
extern const IID IID_IUrlMon;
    typedef struct IUrlMonVtbl
    {
        HRESULT (  *QueryInterface )(
            IUrlMon * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUrlMon * This);
        ULONG (  *Release )(
            IUrlMon * This);
        HRESULT (  *AsyncGetClassBits )(
            IUrlMon * This,
              const IID * const rclsid,
              LPCWSTR pszTYPE,
              LPCWSTR pszExt,
             DWORD dwFileVersionMS,
             DWORD dwFileVersionLS,
              LPCWSTR pszCodeBase,
              IBindCtx *pbc,
             DWORD dwClassContext,
              const IID * const riid,
             DWORD flags);
    } IUrlMonVtbl;
    struct IUrlMon
    {
         struct IUrlMonVtbl *lpVtbl;
    };
extern const IID IID_IForegroundTransfer;
    typedef struct IForegroundTransferVtbl
    {
        HRESULT (  *QueryInterface )(
            IForegroundTransfer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IForegroundTransfer * This);
        ULONG (  *Release )(
            IForegroundTransfer * This);
        HRESULT (  *AllowForegroundTransfer )(
            IForegroundTransfer * This,
             void *lpvReserved);
    } IForegroundTransferVtbl;
    struct IForegroundTransfer
    {
         struct IForegroundTransferVtbl *lpVtbl;
    };
typedef  IAddrTrackingControl *LPADDRTRACKINGCONTROL;
extern const IID IID_IAddrTrackingControl;
    typedef struct IAddrTrackingControlVtbl
    {
        HRESULT (  *QueryInterface )(
            IAddrTrackingControl * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAddrTrackingControl * This);
        ULONG (  *Release )(
            IAddrTrackingControl * This);
        HRESULT (  *EnableCOMDynamicAddrTracking )(
            IAddrTrackingControl * This);
        HRESULT (  *DisableCOMDynamicAddrTracking )(
            IAddrTrackingControl * This);
    } IAddrTrackingControlVtbl;
    struct IAddrTrackingControl
    {
         struct IAddrTrackingControlVtbl *lpVtbl;
    };
typedef  IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
extern const IID IID_IAddrExclusionControl;
    typedef struct IAddrExclusionControlVtbl
    {
        HRESULT (  *QueryInterface )(
            IAddrExclusionControl * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAddrExclusionControl * This);
        ULONG (  *Release )(
            IAddrExclusionControl * This);
        HRESULT (  *GetCurrentAddrExclusionList )(
            IAddrExclusionControl * This,
             const IID * const riid,
             void **ppEnumerator);
        HRESULT (  *UpdateAddrExclusionList )(
            IAddrExclusionControl * This,
             IUnknown *pEnumerator);
    } IAddrExclusionControlVtbl;
    struct IAddrExclusionControl
    {
         struct IAddrExclusionControlVtbl *lpVtbl;
    };
extern const IID IID_IPipeByte;
    typedef struct IPipeByteVtbl
    {
        HRESULT (  *QueryInterface )(
            IPipeByte * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPipeByte * This);
        ULONG (  *Release )(
            IPipeByte * This);
        HRESULT (  *Pull )(
            IPipeByte * This,
              BYTE *buf,
             ULONG cRequest,
              ULONG *pcReturned);
        HRESULT (  *Push )(
            IPipeByte * This,
              BYTE *buf,
             ULONG cSent);
    } IPipeByteVtbl;
    struct IPipeByte
    {
         struct IPipeByteVtbl *lpVtbl;
    };
extern const IID IID_AsyncIPipeByte;
    typedef struct AsyncIPipeByteVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIPipeByte * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIPipeByte * This);
        ULONG (  *Release )(
            AsyncIPipeByte * This);
        HRESULT (  *Begin_Pull )(
            AsyncIPipeByte * This,
             ULONG cRequest);
        HRESULT (  *Finish_Pull )(
            AsyncIPipeByte * This,
              BYTE *buf,
              ULONG *pcReturned);
        HRESULT (  *Begin_Push )(
            AsyncIPipeByte * This,
              BYTE *buf,
             ULONG cSent);
        HRESULT (  *Finish_Push )(
            AsyncIPipeByte * This);
    } AsyncIPipeByteVtbl;
    struct AsyncIPipeByte
    {
         struct AsyncIPipeByteVtbl *lpVtbl;
    };
extern const IID IID_IPipeLong;
    typedef struct IPipeLongVtbl
    {
        HRESULT (  *QueryInterface )(
            IPipeLong * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPipeLong * This);
        ULONG (  *Release )(
            IPipeLong * This);
        HRESULT (  *Pull )(
            IPipeLong * This,
              LONG *buf,
             ULONG cRequest,
              ULONG *pcReturned);
        HRESULT (  *Push )(
            IPipeLong * This,
              LONG *buf,
             ULONG cSent);
    } IPipeLongVtbl;
    struct IPipeLong
    {
         struct IPipeLongVtbl *lpVtbl;
    };
extern const IID IID_AsyncIPipeLong;
    typedef struct AsyncIPipeLongVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIPipeLong * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIPipeLong * This);
        ULONG (  *Release )(
            AsyncIPipeLong * This);
        HRESULT (  *Begin_Pull )(
            AsyncIPipeLong * This,
             ULONG cRequest);
        HRESULT (  *Finish_Pull )(
            AsyncIPipeLong * This,
              LONG *buf,
              ULONG *pcReturned);
        HRESULT (  *Begin_Push )(
            AsyncIPipeLong * This,
              LONG *buf,
             ULONG cSent);
        HRESULT (  *Finish_Push )(
            AsyncIPipeLong * This);
    } AsyncIPipeLongVtbl;
    struct AsyncIPipeLong
    {
         struct AsyncIPipeLongVtbl *lpVtbl;
    };
extern const IID IID_IPipeDouble;
    typedef struct IPipeDoubleVtbl
    {
        HRESULT (  *QueryInterface )(
            IPipeDouble * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPipeDouble * This);
        ULONG (  *Release )(
            IPipeDouble * This);
        HRESULT (  *Pull )(
            IPipeDouble * This,
              DOUBLE *buf,
             ULONG cRequest,
              ULONG *pcReturned);
        HRESULT (  *Push )(
            IPipeDouble * This,
              DOUBLE *buf,
             ULONG cSent);
    } IPipeDoubleVtbl;
    struct IPipeDouble
    {
         struct IPipeDoubleVtbl *lpVtbl;
    };
extern const IID IID_AsyncIPipeDouble;
    typedef struct AsyncIPipeDoubleVtbl
    {
        HRESULT (  *QueryInterface )(
            AsyncIPipeDouble * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            AsyncIPipeDouble * This);
        ULONG (  *Release )(
            AsyncIPipeDouble * This);
        HRESULT (  *Begin_Pull )(
            AsyncIPipeDouble * This,
             ULONG cRequest);
        HRESULT (  *Finish_Pull )(
            AsyncIPipeDouble * This,
              DOUBLE *buf,
              ULONG *pcReturned);
        HRESULT (  *Begin_Push )(
            AsyncIPipeDouble * This,
              DOUBLE *buf,
             ULONG cSent);
        HRESULT (  *Finish_Push )(
            AsyncIPipeDouble * This);
    } AsyncIPipeDoubleVtbl;
    struct AsyncIPipeDouble
    {
         struct AsyncIPipeDoubleVtbl *lpVtbl;
    };
extern const IID IID_IThumbnailExtractor;
    typedef struct IThumbnailExtractorVtbl
    {
        HRESULT (  *QueryInterface )(
            IThumbnailExtractor * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IThumbnailExtractor * This);
        ULONG (  *Release )(
            IThumbnailExtractor * This);
        HRESULT (  *ExtractThumbnail )(
            IThumbnailExtractor * This,
              IStorage *pStg,
             ULONG ulLength,
             ULONG ulHeight,
              ULONG *pulOutputLength,
              ULONG *pulOutputHeight,
              HBITMAP *phOutputBitmap);
        HRESULT (  *OnFileUpdated )(
            IThumbnailExtractor * This,
              IStorage *pStg);
    } IThumbnailExtractorVtbl;
    struct IThumbnailExtractor
    {
         struct IThumbnailExtractorVtbl *lpVtbl;
    };
extern const IID IID_IDummyHICONIncluder;
    typedef struct IDummyHICONIncluderVtbl
    {
        HRESULT (  *QueryInterface )(
            IDummyHICONIncluder * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDummyHICONIncluder * This);
        ULONG (  *Release )(
            IDummyHICONIncluder * This);
        HRESULT (  *Dummy )(
            IDummyHICONIncluder * This,
              HICON h1,
              HDC h2);
    } IDummyHICONIncluderVtbl;
    struct IDummyHICONIncluder
    {
         struct IDummyHICONIncluderVtbl *lpVtbl;
    };
typedef
enum tagApplicationType
    {	ServerApplication	= 0,
	LibraryApplication	= ( ServerApplication + 1 )
    } 	ApplicationType;
typedef
enum tagShutdownType
    {	IdleShutdown	= 0,
	ForcedShutdown	= ( IdleShutdown + 1 )
    } 	ShutdownType;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0078_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0078_v0_0_s_ifspec;
extern const IID IID_IProcessLock;
    typedef struct IProcessLockVtbl
    {
        HRESULT (  *QueryInterface )(
            IProcessLock * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IProcessLock * This);
        ULONG (  *Release )(
            IProcessLock * This);
        ULONG (  *AddRefOnProcess )(
            IProcessLock * This);
        ULONG (  *ReleaseRefOnProcess )(
            IProcessLock * This);
    } IProcessLockVtbl;
    struct IProcessLock
    {
         struct IProcessLockVtbl *lpVtbl;
    };
extern const IID IID_ISurrogateService;
    typedef struct ISurrogateServiceVtbl
    {
        HRESULT (  *QueryInterface )(
            ISurrogateService * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISurrogateService * This);
        ULONG (  *Release )(
            ISurrogateService * This);
        HRESULT (  *Init )(
            ISurrogateService * This,
             const GUID * const rguidProcessID,
             IProcessLock *pProcessLock,
             BOOL *pfApplicationAware);
        HRESULT (  *ApplicationLaunch )(
            ISurrogateService * This,
             const GUID * const rguidApplID,
             ApplicationType appType);
        HRESULT (  *ApplicationFree )(
            ISurrogateService * This,
             const GUID * const rguidApplID);
        HRESULT (  *CatalogRefresh )(
            ISurrogateService * This,
             ULONG ulReserved);
        HRESULT (  *ProcessShutdown )(
            ISurrogateService * This,
             ShutdownType shutdownType);
    } ISurrogateServiceVtbl;
    struct ISurrogateService
    {
         struct ISurrogateServiceVtbl *lpVtbl;
    };
typedef
enum _APTTYPE
    {	APTTYPE_CURRENT	= -1,
	APTTYPE_STA	= 0,
	APTTYPE_MTA	= 1,
	APTTYPE_NA	= 2,
	APTTYPE_MAINSTA	= 3
    } 	APTTYPE;
typedef
enum _THDTYPE
    {	THDTYPE_BLOCKMESSAGES	= 0,
	THDTYPE_PROCESSMESSAGES	= 1
    } 	THDTYPE;
typedef DWORD APARTMENTID;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0080_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0080_v0_0_s_ifspec;
extern const IID IID_IComThreadingInfo;
    typedef struct IComThreadingInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IComThreadingInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IComThreadingInfo * This);
        ULONG (  *Release )(
            IComThreadingInfo * This);
        HRESULT (  *GetCurrentApartmentType )(
            IComThreadingInfo * This,
             APTTYPE *pAptType);
        HRESULT (  *GetCurrentThreadType )(
            IComThreadingInfo * This,
             THDTYPE *pThreadType);
        HRESULT (  *GetCurrentLogicalThreadId )(
            IComThreadingInfo * This,
             GUID *pguidLogicalThreadId);
        HRESULT (  *SetCurrentLogicalThreadId )(
            IComThreadingInfo * This,
             const GUID * const rguid);
    } IComThreadingInfoVtbl;
    struct IComThreadingInfo
    {
         struct IComThreadingInfoVtbl *lpVtbl;
    };
extern const IID IID_IProcessInitControl;
    typedef struct IProcessInitControlVtbl
    {
        HRESULT (  *QueryInterface )(
            IProcessInitControl * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IProcessInitControl * This);
        ULONG (  *Release )(
            IProcessInitControl * This);
        HRESULT (  *ResetInitializerTimeout )(
            IProcessInitControl * This,
             DWORD dwSecondsRemaining);
    } IProcessInitControlVtbl;
    struct IProcessInitControl
    {
         struct IProcessInitControlVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0082_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0082_v0_0_s_ifspec;
typedef  IInitializeSpy *LPINITIALIZESPY;
extern const IID IID_IInitializeSpy;
    typedef struct IInitializeSpyVtbl
    {
        HRESULT (  *QueryInterface )(
            IInitializeSpy * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInitializeSpy * This);
        ULONG (  *Release )(
            IInitializeSpy * This);
        HRESULT (  *PreInitialize )(
            IInitializeSpy * This,
             DWORD dwCoInit,
             DWORD dwCurThreadAptRefs);
        HRESULT (  *PostInitialize )(
            IInitializeSpy * This,
             HRESULT hrCoInit,
             DWORD dwCoInit,
             DWORD dwNewThreadAptRefs);
        HRESULT (  *PreUninitialize )(
            IInitializeSpy * This,
             DWORD dwCurThreadAptRefs);
        HRESULT (  *PostUninitialize )(
            IInitializeSpy * This,
             DWORD dwNewThreadAptRefs);
    } IInitializeSpyVtbl;
    struct IInitializeSpy
    {
         struct IInitializeSpyVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0083_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_0083_v0_0_s_ifspec;
unsigned long               ASYNC_STGMEDIUM_UserSize(     unsigned long *, unsigned long            , ASYNC_STGMEDIUM * );
unsigned char *   ASYNC_STGMEDIUM_UserMarshal(  unsigned long *, unsigned char *, ASYNC_STGMEDIUM * );
unsigned char *   ASYNC_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, ASYNC_STGMEDIUM * );
void                        ASYNC_STGMEDIUM_UserFree(     unsigned long *, ASYNC_STGMEDIUM * );
unsigned long               CLIPFORMAT_UserSize(     unsigned long *, unsigned long            , CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserMarshal(  unsigned long *, unsigned char *, CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserUnmarshal(unsigned long *, unsigned char *, CLIPFORMAT * );
void                        CLIPFORMAT_UserFree(     unsigned long *, CLIPFORMAT * );
unsigned long               FLAG_STGMEDIUM_UserSize(     unsigned long *, unsigned long            , FLAG_STGMEDIUM * );
unsigned char *   FLAG_STGMEDIUM_UserMarshal(  unsigned long *, unsigned char *, FLAG_STGMEDIUM * );
unsigned char *   FLAG_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, FLAG_STGMEDIUM * );
void                        FLAG_STGMEDIUM_UserFree(     unsigned long *, FLAG_STGMEDIUM * );
unsigned long               HBITMAP_UserSize(     unsigned long *, unsigned long            , HBITMAP * );
unsigned char *   HBITMAP_UserMarshal(  unsigned long *, unsigned char *, HBITMAP * );
unsigned char *   HBITMAP_UserUnmarshal(unsigned long *, unsigned char *, HBITMAP * );
void                        HBITMAP_UserFree(     unsigned long *, HBITMAP * );
unsigned long               HDC_UserSize(     unsigned long *, unsigned long            , HDC * );
unsigned char *   HDC_UserMarshal(  unsigned long *, unsigned char *, HDC * );
unsigned char *   HDC_UserUnmarshal(unsigned long *, unsigned char *, HDC * );
void                        HDC_UserFree(     unsigned long *, HDC * );
unsigned long               HICON_UserSize(     unsigned long *, unsigned long            , HICON * );
unsigned char *   HICON_UserMarshal(  unsigned long *, unsigned char *, HICON * );
unsigned char *   HICON_UserUnmarshal(unsigned long *, unsigned char *, HICON * );
void                        HICON_UserFree(     unsigned long *, HICON * );
unsigned long               SNB_UserSize(     unsigned long *, unsigned long            , SNB * );
unsigned char *   SNB_UserMarshal(  unsigned long *, unsigned char *, SNB * );
unsigned char *   SNB_UserUnmarshal(unsigned long *, unsigned char *, SNB * );
void                        SNB_UserFree(     unsigned long *, SNB * );
unsigned long               STGMEDIUM_UserSize(     unsigned long *, unsigned long            , STGMEDIUM * );
unsigned char *   STGMEDIUM_UserMarshal(  unsigned long *, unsigned char *, STGMEDIUM * );
unsigned char *   STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, STGMEDIUM * );
void                        STGMEDIUM_UserFree(     unsigned long *, STGMEDIUM * );
unsigned long               ASYNC_STGMEDIUM_UserSize64(     unsigned long *, unsigned long            , ASYNC_STGMEDIUM * );
unsigned char *   ASYNC_STGMEDIUM_UserMarshal64(  unsigned long *, unsigned char *, ASYNC_STGMEDIUM * );
unsigned char *   ASYNC_STGMEDIUM_UserUnmarshal64(unsigned long *, unsigned char *, ASYNC_STGMEDIUM * );
void                        ASYNC_STGMEDIUM_UserFree64(     unsigned long *, ASYNC_STGMEDIUM * );
unsigned long               CLIPFORMAT_UserSize64(     unsigned long *, unsigned long            , CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserMarshal64(  unsigned long *, unsigned char *, CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserUnmarshal64(unsigned long *, unsigned char *, CLIPFORMAT * );
void                        CLIPFORMAT_UserFree64(     unsigned long *, CLIPFORMAT * );
unsigned long               FLAG_STGMEDIUM_UserSize64(     unsigned long *, unsigned long            , FLAG_STGMEDIUM * );
unsigned char *   FLAG_STGMEDIUM_UserMarshal64(  unsigned long *, unsigned char *, FLAG_STGMEDIUM * );
unsigned char *   FLAG_STGMEDIUM_UserUnmarshal64(unsigned long *, unsigned char *, FLAG_STGMEDIUM * );
void                        FLAG_STGMEDIUM_UserFree64(     unsigned long *, FLAG_STGMEDIUM * );
unsigned long               HBITMAP_UserSize64(     unsigned long *, unsigned long            , HBITMAP * );
unsigned char *   HBITMAP_UserMarshal64(  unsigned long *, unsigned char *, HBITMAP * );
unsigned char *   HBITMAP_UserUnmarshal64(unsigned long *, unsigned char *, HBITMAP * );
void                        HBITMAP_UserFree64(     unsigned long *, HBITMAP * );
unsigned long               HDC_UserSize64(     unsigned long *, unsigned long            , HDC * );
unsigned char *   HDC_UserMarshal64(  unsigned long *, unsigned char *, HDC * );
unsigned char *   HDC_UserUnmarshal64(unsigned long *, unsigned char *, HDC * );
void                        HDC_UserFree64(     unsigned long *, HDC * );
unsigned long               HICON_UserSize64(     unsigned long *, unsigned long            , HICON * );
unsigned char *   HICON_UserMarshal64(  unsigned long *, unsigned char *, HICON * );
unsigned char *   HICON_UserUnmarshal64(unsigned long *, unsigned char *, HICON * );
void                        HICON_UserFree64(     unsigned long *, HICON * );
unsigned long               SNB_UserSize64(     unsigned long *, unsigned long            , SNB * );
unsigned char *   SNB_UserMarshal64(  unsigned long *, unsigned char *, SNB * );
unsigned char *   SNB_UserUnmarshal64(unsigned long *, unsigned char *, SNB * );
void                        SNB_UserFree64(     unsigned long *, SNB * );
unsigned long               STGMEDIUM_UserSize64(     unsigned long *, unsigned long            , STGMEDIUM * );
unsigned char *   STGMEDIUM_UserMarshal64(  unsigned long *, unsigned char *, STGMEDIUM * );
unsigned char *   STGMEDIUM_UserUnmarshal64(unsigned long *, unsigned char *, STGMEDIUM * );
void                        STGMEDIUM_UserFree64(     unsigned long *, STGMEDIUM * );
 HRESULT  IEnumUnknown_Next_Proxy(
    IEnumUnknown * This,
     ULONG celt,
     IUnknown **rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumUnknown_Next_Stub(
    IEnumUnknown * This,
     ULONG celt,
      IUnknown **rgelt,
      ULONG *pceltFetched);
 HRESULT  IBindCtx_SetBindOptions_Proxy(
    IBindCtx * This,
     BIND_OPTS *pbindopts);
 HRESULT  IBindCtx_SetBindOptions_Stub(
    IBindCtx * This,
      BIND_OPTS2 *pbindopts);
 HRESULT  IBindCtx_GetBindOptions_Proxy(
    IBindCtx * This,
     BIND_OPTS *pbindopts);
 HRESULT  IBindCtx_GetBindOptions_Stub(
    IBindCtx * This,
      BIND_OPTS2 *pbindopts);
 HRESULT  IEnumMoniker_Next_Proxy(
    IEnumMoniker * This,
     ULONG celt,
     IMoniker **rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumMoniker_Next_Stub(
    IEnumMoniker * This,
     ULONG celt,
      IMoniker **rgelt,
      ULONG *pceltFetched);
 BOOL  IRunnableObject_IsRunning_Proxy(
    IRunnableObject * This);
 HRESULT  IRunnableObject_IsRunning_Stub(
    IRunnableObject * This);
 HRESULT  IMoniker_BindToObject_Proxy(
    IMoniker * This,
     IBindCtx *pbc,
     IMoniker *pmkToLeft,
     const IID * const riidResult,
     void **ppvResult);
 HRESULT  IMoniker_BindToObject_Stub(
    IMoniker * This,
      IBindCtx *pbc,
      IMoniker *pmkToLeft,
      const IID * const riidResult,
      IUnknown **ppvResult);
 HRESULT  IMoniker_BindToStorage_Proxy(
    IMoniker * This,
     IBindCtx *pbc,
     IMoniker *pmkToLeft,
     const IID * const riid,
     void **ppvObj);
 HRESULT  IMoniker_BindToStorage_Stub(
    IMoniker * This,
      IBindCtx *pbc,
      IMoniker *pmkToLeft,
      const IID * const riid,
      IUnknown **ppvObj);
 HRESULT  IEnumString_Next_Proxy(
    IEnumString * This,
     ULONG celt,
      LPOLESTR *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumString_Next_Stub(
    IEnumString * This,
     ULONG celt,
      LPOLESTR *rgelt,
      ULONG *pceltFetched);
 HRESULT  ISequentialStream_Read_Proxy(
    ISequentialStream * This,
     void *pv,
     ULONG cb,
     ULONG *pcbRead);
 HRESULT  ISequentialStream_Read_Stub(
    ISequentialStream * This,
      byte *pv,
     ULONG cb,
      ULONG *pcbRead);
 HRESULT  ISequentialStream_Write_Proxy(
    ISequentialStream * This,
     const void *pv,
     ULONG cb,
     ULONG *pcbWritten);
 HRESULT  ISequentialStream_Write_Stub(
    ISequentialStream * This,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
 HRESULT  IStream_Seek_Proxy(
    IStream * This,
     LARGE_INTEGER dlibMove,
     DWORD dwOrigin,
     ULARGE_INTEGER *plibNewPosition);
 HRESULT  IStream_Seek_Stub(
    IStream * This,
     LARGE_INTEGER dlibMove,
     DWORD dwOrigin,
      ULARGE_INTEGER *plibNewPosition);
 HRESULT  IStream_CopyTo_Proxy(
    IStream * This,
     IStream *pstm,
     ULARGE_INTEGER cb,
     ULARGE_INTEGER *pcbRead,
     ULARGE_INTEGER *pcbWritten);
 HRESULT  IStream_CopyTo_Stub(
    IStream * This,
      IStream *pstm,
     ULARGE_INTEGER cb,
      ULARGE_INTEGER *pcbRead,
      ULARGE_INTEGER *pcbWritten);
 HRESULT  IEnumSTATSTG_Next_Proxy(
    IEnumSTATSTG * This,
     ULONG celt,
     STATSTG *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumSTATSTG_Next_Stub(
    IEnumSTATSTG * This,
     ULONG celt,
      STATSTG *rgelt,
      ULONG *pceltFetched);
 HRESULT  IStorage_OpenStream_Proxy(
    IStorage * This,
     const OLECHAR *pwcsName,
     void *reserved1,
     DWORD grfMode,
     DWORD reserved2,
     IStream **ppstm);
 HRESULT  IStorage_OpenStream_Stub(
    IStorage * This,
      const OLECHAR *pwcsName,
     unsigned long cbReserved1,
      byte *reserved1,
     DWORD grfMode,
     DWORD reserved2,
      IStream **ppstm);
 HRESULT  IStorage_CopyTo_Proxy(
    IStorage * This,
     DWORD ciidExclude,
     const IID *rgiidExclude,
     SNB snbExclude,
     IStorage *pstgDest);
 HRESULT  IStorage_CopyTo_Stub(
    IStorage * This,
     DWORD ciidExclude,
      const IID *rgiidExclude,
      SNB snbExclude,
      IStorage *pstgDest);
 HRESULT  IStorage_EnumElements_Proxy(
    IStorage * This,
     DWORD reserved1,
     void *reserved2,
     DWORD reserved3,
     IEnumSTATSTG **ppenum);
 HRESULT  IStorage_EnumElements_Stub(
    IStorage * This,
     DWORD reserved1,
     unsigned long cbReserved2,
      byte *reserved2,
     DWORD reserved3,
      IEnumSTATSTG **ppenum);
 HRESULT  ILockBytes_ReadAt_Proxy(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
     void *pv,
     ULONG cb,
     ULONG *pcbRead);
 HRESULT  ILockBytes_ReadAt_Stub(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
      byte *pv,
     ULONG cb,
      ULONG *pcbRead);
 HRESULT  ILockBytes_WriteAt_Proxy(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
     const void *pv,
     ULONG cb,
     ULONG *pcbWritten);
 HRESULT  ILockBytes_WriteAt_Stub(
    ILockBytes * This,
     ULARGE_INTEGER ulOffset,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
 HRESULT  IEnumFORMATETC_Next_Proxy(
    IEnumFORMATETC * This,
     ULONG celt,
     FORMATETC *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumFORMATETC_Next_Stub(
    IEnumFORMATETC * This,
     ULONG celt,
      FORMATETC *rgelt,
      ULONG *pceltFetched);
 HRESULT  IEnumSTATDATA_Next_Proxy(
    IEnumSTATDATA * This,
     ULONG celt,
     STATDATA *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumSTATDATA_Next_Stub(
    IEnumSTATDATA * This,
     ULONG celt,
      STATDATA *rgelt,
      ULONG *pceltFetched);
 void  IAdviseSink_OnDataChange_Proxy(
    IAdviseSink * This,
     FORMATETC *pFormatetc,
     STGMEDIUM *pStgmed);
 HRESULT  IAdviseSink_OnDataChange_Stub(
    IAdviseSink * This,
      FORMATETC *pFormatetc,
      ASYNC_STGMEDIUM *pStgmed);
 void  IAdviseSink_OnViewChange_Proxy(
    IAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
 HRESULT  IAdviseSink_OnViewChange_Stub(
    IAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
 void  IAdviseSink_OnRename_Proxy(
    IAdviseSink * This,
     IMoniker *pmk);
 HRESULT  IAdviseSink_OnRename_Stub(
    IAdviseSink * This,
      IMoniker *pmk);
 void  IAdviseSink_OnSave_Proxy(
    IAdviseSink * This);
 HRESULT  IAdviseSink_OnSave_Stub(
    IAdviseSink * This);
 void  IAdviseSink_OnClose_Proxy(
    IAdviseSink * This);
 HRESULT  IAdviseSink_OnClose_Stub(
    IAdviseSink * This);
 void  IAdviseSink2_OnLinkSrcChange_Proxy(
    IAdviseSink2 * This,
     IMoniker *pmk);
 HRESULT  IAdviseSink2_OnLinkSrcChange_Stub(
    IAdviseSink2 * This,
      IMoniker *pmk);
 HRESULT  IDataObject_GetData_Proxy(
    IDataObject * This,
     FORMATETC *pformatetcIn,
     STGMEDIUM *pmedium);
 HRESULT  IDataObject_GetData_Stub(
    IDataObject * This,
      FORMATETC *pformatetcIn,
      STGMEDIUM *pRemoteMedium);
 HRESULT  IDataObject_GetDataHere_Proxy(
    IDataObject * This,
     FORMATETC *pformatetc,
     STGMEDIUM *pmedium);
 HRESULT  IDataObject_GetDataHere_Stub(
    IDataObject * This,
      FORMATETC *pformatetc,
      STGMEDIUM *pRemoteMedium);
 HRESULT  IDataObject_SetData_Proxy(
    IDataObject * This,
     FORMATETC *pformatetc,
     STGMEDIUM *pmedium,
     BOOL fRelease);
 HRESULT  IDataObject_SetData_Stub(
    IDataObject * This,
      FORMATETC *pformatetc,
      FLAG_STGMEDIUM *pmedium,
     BOOL fRelease);
 HRESULT  IFillLockBytes_FillAppend_Proxy(
    IFillLockBytes * This,
     const void *pv,
     ULONG cb,
     ULONG *pcbWritten);
 HRESULT  IFillLockBytes_FillAppend_Stub(
    IFillLockBytes * This,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
 HRESULT  IFillLockBytes_FillAt_Proxy(
    IFillLockBytes * This,
     ULARGE_INTEGER ulOffset,
     const void *pv,
     ULONG cb,
     ULONG *pcbWritten);
 HRESULT  IFillLockBytes_FillAt_Stub(
    IFillLockBytes * This,
     ULARGE_INTEGER ulOffset,
      const byte *pv,
     ULONG cb,
      ULONG *pcbWritten);
 void  AsyncIAdviseSink_Begin_OnDataChange_Proxy(
    AsyncIAdviseSink * This,
     FORMATETC *pFormatetc,
     STGMEDIUM *pStgmed);
 HRESULT  AsyncIAdviseSink_Begin_OnDataChange_Stub(
    AsyncIAdviseSink * This,
      FORMATETC *pFormatetc,
      ASYNC_STGMEDIUM *pStgmed);
 void  AsyncIAdviseSink_Finish_OnDataChange_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Finish_OnDataChange_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Begin_OnViewChange_Proxy(
    AsyncIAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
 HRESULT  AsyncIAdviseSink_Begin_OnViewChange_Stub(
    AsyncIAdviseSink * This,
     DWORD dwAspect,
     LONG lindex);
 void  AsyncIAdviseSink_Finish_OnViewChange_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Finish_OnViewChange_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Begin_OnRename_Proxy(
    AsyncIAdviseSink * This,
     IMoniker *pmk);
 HRESULT  AsyncIAdviseSink_Begin_OnRename_Stub(
    AsyncIAdviseSink * This,
      IMoniker *pmk);
 void  AsyncIAdviseSink_Finish_OnRename_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Finish_OnRename_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Begin_OnSave_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Begin_OnSave_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Finish_OnSave_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Finish_OnSave_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Begin_OnClose_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Begin_OnClose_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink_Finish_OnClose_Proxy(
    AsyncIAdviseSink * This);
 HRESULT  AsyncIAdviseSink_Finish_OnClose_Stub(
    AsyncIAdviseSink * This);
 void  AsyncIAdviseSink2_Begin_OnLinkSrcChange_Proxy(
    AsyncIAdviseSink2 * This,
     IMoniker *pmk);
 HRESULT  AsyncIAdviseSink2_Begin_OnLinkSrcChange_Stub(
    AsyncIAdviseSink2 * This,
      IMoniker *pmk);
 void  AsyncIAdviseSink2_Finish_OnLinkSrcChange_Proxy(
    AsyncIAdviseSink2 * This);
 HRESULT  AsyncIAdviseSink2_Finish_OnLinkSrcChange_Stub(
    AsyncIAdviseSink2 * This);
extern const IID GUID_NULL;
extern const IID CATID_MARSHALER;
extern const IID IID_IRpcChannel;
extern const IID IID_IRpcStub;
extern const IID IID_IStubManager;
extern const IID IID_IRpcProxy;
extern const IID IID_IProxyManager;
extern const IID IID_IPSFactory;
extern const IID IID_IInternalMoniker;
extern const IID IID_IDfReserved1;
extern const IID IID_IDfReserved2;
extern const IID IID_IDfReserved3;
extern const CLSID CLSID_StdMarshal;
extern const CLSID CLSID_AggStdMarshal;
extern const CLSID CLSID_StdAsyncActManager;
extern const IID IID_IStub;
extern const IID IID_IProxy;
extern const IID IID_IEnumGeneric;
extern const IID IID_IEnumHolder;
extern const IID IID_IEnumCallback;
extern const IID IID_IOleManager;
extern const IID IID_IOlePresObj;
extern const IID IID_IDebug;
extern const IID IID_IDebugStream;
extern const CLSID CLSID_PSGenObject;
extern const CLSID CLSID_PSClientSite;
extern const CLSID CLSID_PSClassObject;
extern const CLSID CLSID_PSInPlaceActive;
extern const CLSID CLSID_PSInPlaceFrame;
extern const CLSID CLSID_PSDragDrop;
extern const CLSID CLSID_PSBindCtx;
extern const CLSID CLSID_PSEnumerators;
extern const CLSID CLSID_StaticMetafile;
extern const CLSID CLSID_StaticDib;
extern const CLSID CID_CDfsVolume;
extern const CLSID CLSID_DCOMAccessControl;
extern const CLSID CLSID_GlobalOptions;
extern const CLSID CLSID_StdGlobalInterfaceTable;
extern const CLSID CLSID_ComBinding;
extern const CLSID CLSID_StdEvent;
extern const CLSID CLSID_ManualResetEvent;
extern const CLSID CLSID_SynchronizeContainer;
extern const CLSID CLSID_AddrControl;
extern const CLSID CLSID_ContextSwitcher;
extern const CLSID CLSID_CCDFormKrnl;
extern const CLSID CLSID_CCDPropertyPage;
extern const CLSID CLSID_CCDFormDialog;
extern const CLSID CLSID_CCDCommandButton;
extern const CLSID CLSID_CCDComboBox;
extern const CLSID CLSID_CCDTextBox;
extern const CLSID CLSID_CCDCheckBox;
extern const CLSID CLSID_CCDLabel;
extern const CLSID CLSID_CCDOptionButton;
extern const CLSID CLSID_CCDListBox;
extern const CLSID CLSID_CCDScrollBar;
extern const CLSID CLSID_CCDGroupBox;
extern const CLSID CLSID_CCDGeneralPropertyPage;
extern const CLSID CLSID_CCDGenericPropertyPage;
extern const CLSID CLSID_CCDFontPropertyPage;
extern const CLSID CLSID_CCDColorPropertyPage;
extern const CLSID CLSID_CCDLabelPropertyPage;
extern const CLSID CLSID_CCDCheckBoxPropertyPage;
extern const CLSID CLSID_CCDTextBoxPropertyPage;
extern const CLSID CLSID_CCDOptionButtonPropertyPage;
extern const CLSID CLSID_CCDListBoxPropertyPage;
extern const CLSID CLSID_CCDCommandButtonPropertyPage;
extern const CLSID CLSID_CCDComboBoxPropertyPage;
extern const CLSID CLSID_CCDScrollBarPropertyPage;
extern const CLSID CLSID_CCDGroupBoxPropertyPage;
extern const CLSID CLSID_CCDXObjectPropertyPage;
extern const CLSID CLSID_CStdPropertyFrame;
extern const CLSID CLSID_CFormPropertyPage;
extern const CLSID CLSID_CGridPropertyPage;
extern const CLSID CLSID_CWSJArticlePage;
extern const CLSID CLSID_CSystemPage;
extern const CLSID CLSID_IdentityUnmarshal;
extern const CLSID CLSID_InProcFreeMarshaler;
extern const CLSID CLSID_Picture_Metafile;
extern const CLSID CLSID_Picture_EnhMetafile;
extern const CLSID CLSID_Picture_Dib;
extern const GUID GUID_TRISTATE;
typedef enum tagCOINIT
{
  COINIT_APARTMENTTHREADED  = 0x2,
  COINIT_MULTITHREADED      = 0x0,
  COINIT_DISABLE_OLE1DDE    = 0x4,
  COINIT_SPEED_OVER_MEMORY  = 0x8,
} COINIT;
extern  DWORD  CoBuildVersion( void );
extern  HRESULT   CoInitialize( LPVOID pvReserved);
extern  void   CoUninitialize(void);
extern  HRESULT   CoGetMalloc( DWORD dwMemContext,  LPMALLOC * ppMalloc);
extern  DWORD  CoGetCurrentProcess(void);
extern  HRESULT   CoRegisterMallocSpy( LPMALLOCSPY pMallocSpy);
extern  HRESULT   CoRevokeMallocSpy(void);
extern  HRESULT   CoCreateStandardMalloc( DWORD memctx,  IMalloc * * ppMalloc);
extern  HRESULT   CoInitializeEx( LPVOID pvReserved,  DWORD dwCoInit);
extern  HRESULT  CoGetCallerTID(  LPDWORD lpdwTID );
extern  HRESULT  CoGetCurrentLogicalThreadId( GUID *pguid);
extern  HRESULT   CoRegisterInitializeSpy( LPINITIALIZESPY pSpy,  ULARGE_INTEGER *puliCookie);
extern  HRESULT   CoRevokeInitializeSpy( ULARGE_INTEGER uliCookie);
extern  HRESULT   CoGetContextToken( ULONG_PTR* pToken);
typedef enum tagCOMSD
{
    SD_LAUNCHPERMISSIONS = 0,
    SD_ACCESSPERMISSIONS = 1,
    SD_LAUNCHRESTRICTIONS = 2,
    SD_ACCESSRESTRICTIONS = 3
} COMSD;
extern  HRESULT   CoGetSystemSecurityPermissions(COMSD comSDType, PSECURITY_DESCRIPTOR *ppSD);
typedef struct tagSOleTlsDataPublic
{
    void *pvReserved0[2];
    DWORD dwReserved0[3];
    void *pvReserved1[1];
    DWORD dwReserved1[3];
    void *pvReserved2[4];
    DWORD dwReserved2[1];
    void *pCurrentCtx;
} SOleTlsDataPublic;
extern  HRESULT      CoGetObjectContext( const IID * const riid,  LPVOID * ppv);
extern  HRESULT   CoGetClassObject( const IID * const rclsid,  DWORD dwClsContext,  LPVOID pvReserved,
                     const IID * const riid,  LPVOID * ppv);
extern  HRESULT   CoRegisterClassObject( const IID * const rclsid,  LPUNKNOWN pUnk,
                     DWORD dwClsContext,  DWORD flags,  LPDWORD lpdwRegister);
extern  HRESULT   CoRevokeClassObject( DWORD dwRegister);
extern  HRESULT   CoResumeClassObjects(void);
extern  HRESULT   CoSuspendClassObjects(void);
extern  ULONG  CoAddRefServerProcess(void);
extern  ULONG  CoReleaseServerProcess(void);
extern  HRESULT   CoGetPSClsid( const IID * const riid,  CLSID *pClsid);
extern  HRESULT   CoRegisterPSClsid( const IID * const riid,  const IID * const rclsid);
extern  HRESULT   CoRegisterSurrogate( LPSURROGATE pSurrogate);
extern  HRESULT  CoGetMarshalSizeMax( ULONG *pulSize,  const IID * const riid,  LPUNKNOWN pUnk,
                     DWORD dwDestContext,  LPVOID pvDestContext,  DWORD mshlflags);
extern  HRESULT  CoMarshalInterface( LPSTREAM pStm,  const IID * const riid,  LPUNKNOWN pUnk,
                     DWORD dwDestContext,  LPVOID pvDestContext,  DWORD mshlflags);
extern  HRESULT  CoUnmarshalInterface( LPSTREAM pStm,  const IID * const riid,  LPVOID * ppv);
extern  HRESULT  CoMarshalHresult( LPSTREAM pstm,  HRESULT hresult);
extern  HRESULT  CoUnmarshalHresult( LPSTREAM pstm,  HRESULT  * phresult);
extern  HRESULT  CoReleaseMarshalData( LPSTREAM pStm);
extern  HRESULT  CoDisconnectObject( LPUNKNOWN pUnk,  DWORD dwReserved);
extern  HRESULT  CoLockObjectExternal( LPUNKNOWN pUnk,  BOOL fLock,  BOOL fLastUnlockReleases);
extern  HRESULT  CoGetStandardMarshal( const IID * const riid,  LPUNKNOWN pUnk,
                     DWORD dwDestContext,  LPVOID pvDestContext,  DWORD mshlflags,
                     LPMARSHAL * ppMarshal);
extern  HRESULT  CoGetStdMarshalEx( LPUNKNOWN pUnkOuter,  DWORD smexflags,
                             LPUNKNOWN * ppUnkInner);
typedef enum tagSTDMSHLFLAGS
{
    SMEXF_SERVER     = 0x01,
    SMEXF_HANDLER    = 0x02
} STDMSHLFLAGS;
extern  BOOL  CoIsHandlerConnected( LPUNKNOWN pUnk);
extern  HRESULT  CoMarshalInterThreadInterfaceInStream( const IID * const riid,  LPUNKNOWN pUnk,
                     LPSTREAM *ppStm);
extern  HRESULT  CoGetInterfaceAndReleaseStream( LPSTREAM pStm,  const IID * const iid,
                     LPVOID * ppv);
extern  HRESULT  CoCreateFreeThreadedMarshaler( LPUNKNOWN  punkOuter,
                     LPUNKNOWN *ppunkMarshal);
extern  HINSTANCE  CoLoadLibrary( LPOLESTR lpszLibName,  BOOL bAutoFree);
extern  void  CoFreeLibrary( HINSTANCE hInst);
extern  void  CoFreeAllLibraries(void);
extern  void  CoFreeUnusedLibraries(void);
extern  void  CoFreeUnusedLibrariesEx( DWORD dwUnloadDelay,  DWORD dwReserved);
extern  HRESULT  CoDisconnectContext(DWORD dwTimeout);
extern  HRESULT  CoInitializeSecurity(
                     PSECURITY_DESCRIPTOR    pSecDesc,
                     LONG                        cAuthSvc,
                         SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
                     void                    *pReserved1,
                     DWORD                        dwAuthnLevel,
                     DWORD                        dwImpLevel,
                     void                    *pAuthList,
                     DWORD                        dwCapabilities,
                     void                    *pReserved3 );
extern  HRESULT  CoGetCallContext(  const IID * const riid,  void **ppInterface );
 extern  HRESULT  CoQueryProxyBlanket(
     IUnknown                       *pProxy,
     DWORD                     *pwAuthnSvc,
     DWORD                     *pAuthzSvc,
     OLECHAR            **pServerPrincName,
     DWORD                     *pAuthnLevel,
     DWORD                     *pImpLevel,
     RPC_AUTH_IDENTITY_HANDLE  *pAuthInfo,
     DWORD                     *pCapabilites );
extern  HRESULT  CoSetProxyBlanket(
     IUnknown                     *pProxy,
     DWORD                         dwAuthnSvc,
     DWORD                         dwAuthzSvc,
     OLECHAR                  *pServerPrincName,
     DWORD                         dwAuthnLevel,
     DWORD                         dwImpLevel,
     RPC_AUTH_IDENTITY_HANDLE  pAuthInfo,
     DWORD                         dwCapabilities );
extern  HRESULT  CoCopyProxy(
     IUnknown           *pProxy,
     IUnknown   **ppCopy );
 extern  HRESULT  CoQueryClientBlanket(
     DWORD             *pAuthnSvc,
     DWORD             *pAuthzSvc,
     OLECHAR           **pServerPrincName,
     DWORD             *pAuthnLevel,
     DWORD             *pImpLevel,
     RPC_AUTHZ_HANDLE  *pPrivs,
     DWORD           *pCapabilities );
extern  HRESULT  CoImpersonateClient(void);
extern  HRESULT  CoRevertToSelf(void);
extern  HRESULT  CoQueryAuthenticationServices(
     DWORD *pcAuthSvc,
     SOLE_AUTHENTICATION_SERVICE **asAuthSvc );
extern  HRESULT  CoSwitchCallContext(  IUnknown *pNewObject,  IUnknown **ppOldObject );
extern  HRESULT  CoCreateInstance(     const IID * const rclsid,
                            LPUNKNOWN pUnkOuter,
                                DWORD dwClsContext,
                                const IID * const riid,
                            LPVOID * ppv);
extern  HRESULT  CoGetInstanceFromFile(
     COSERVERINFO *            pServerInfo,
     CLSID        *            pClsid,
     IUnknown     *            punkOuter,
     DWORD                         dwClsCtx,
     DWORD                         grfMode,
     OLECHAR          *            pwszName,
     DWORD                         dwCount,
     MULTI_QI * pResults );
extern  HRESULT  CoGetInstanceFromIStorage(
     COSERVERINFO *            pServerInfo,
     CLSID        *            pClsid,
     IUnknown     *            punkOuter,
     DWORD                         dwClsCtx,
     struct IStorage  *            pstg,
     DWORD                         dwCount,
     MULTI_QI * pResults );
extern  HRESULT  CoCreateInstanceEx(
     const IID * const                      Clsid,
     IUnknown     *            punkOuter,
     DWORD                         dwClsCtx,
     COSERVERINFO *            pServerInfo,
     DWORD                         dwCount,
     MULTI_QI * pResults );
extern  HRESULT  CoGetCancelObject( DWORD dwThreadId,  const IID * const iid,  void **ppUnk);
extern  HRESULT  CoSetCancelObject( IUnknown *pUnk);
extern  HRESULT  CoCancelCall( DWORD dwThreadId,  ULONG ulTimeout);
extern  HRESULT  CoTestCancel(void);
extern  HRESULT  CoEnableCallCancellation( LPVOID pReserved);
extern  HRESULT  CoDisableCallCancellation( LPVOID pReserved);
extern  HRESULT  CoAllowSetForegroundWindow( IUnknown *pUnk,  LPVOID lpvReserved);
extern  HRESULT  DcomChannelSetHResult( LPVOID pvReserved,  ULONG* pulReserved,  HRESULT appsHR);
 extern  HRESULT  StringFromCLSID( const IID * const rclsid,  LPOLESTR * lplpsz);
extern  HRESULT  CLSIDFromString( LPOLESTR lpsz,  LPCLSID pclsid);
 extern  HRESULT  StringFromIID( const IID * const rclsid,  LPOLESTR * lplpsz);
extern  HRESULT  IIDFromString( LPOLESTR lpsz,  LPIID lpiid);
extern  BOOL  CoIsOle1Class( const IID * const rclsid);
 extern  HRESULT  ProgIDFromCLSID ( const IID * const clsid,  LPOLESTR * lplpszProgID);
extern  HRESULT  CLSIDFromProgID ( LPCOLESTR lpszProgID,  LPCLSID lpclsid);
extern  HRESULT  CLSIDFromProgIDEx ( LPCOLESTR lpszProgID,  LPCLSID lpclsid);
 extern  int  StringFromGUID2( const GUID * const rguid,  LPOLESTR lpsz,  int cchMax);
extern  HRESULT  CoCreateGuid( GUID  *pguid);
extern  BOOL  CoFileTimeToDosDateTime(
                  FILETIME * lpFileTime,  LPWORD lpDosDate,  LPWORD lpDosTime);
extern  BOOL  CoDosDateTimeToFileTime(
                        WORD nDosDate,  WORD nDosTime,  FILETIME * lpFileTime);
extern  HRESULT   CoFileTimeNow(  FILETIME * lpFileTime );
extern  HRESULT  CoRegisterMessageFilter(  LPMESSAGEFILTER lpMessageFilter,
                                 LPMESSAGEFILTER * lplpMessageFilter );
extern  HRESULT  CoRegisterChannelHook(  const GUID * const ExtensionUuid,  IChannelHook *pChannelHook );
extern  HRESULT  CoWaitForMultipleHandles ( DWORD dwFlags,
                                     DWORD dwTimeout,
                                     ULONG cHandles,
                                     LPHANDLE pHandles,
                                     LPDWORD  lpdwindex);
typedef enum tagCOWAIT_FLAGS
{
  COWAIT_WAITALL = 1,
  COWAIT_ALERTABLE = 2,
  COWAIT_INPUTAVAILABLE = 4
}COWAIT_FLAGS;
extern  HRESULT  CoInvalidateRemoteMachineBindings( LPOLESTR pszMachineName);
extern  HRESULT  CoGetTreatAsClass( const IID * const clsidOld,  LPCLSID pClsidNew);
extern  HRESULT  CoTreatAsClass( const IID * const clsidOld,  const IID * const clsidNew);
typedef HRESULT ( * LPFNGETCLASSOBJECT) (const IID * const, const IID * const, LPVOID *);
typedef HRESULT ( * LPFNCANUNLOADNOW)(void);
extern HRESULT   DllGetClassObject( const IID * const rclsid,  const IID * const riid, LPVOID * ppv);
extern HRESULT   DllCanUnloadNow(void);
extern    LPVOID  CoTaskMemAlloc( SIZE_T cb);
extern    LPVOID  CoTaskMemRealloc( LPVOID pv,  SIZE_T cb);
extern  void    CoTaskMemFree( LPVOID pv);
extern  HRESULT  CreateDataAdviseHolder( LPDATAADVISEHOLDER * ppDAHolder);
extern  HRESULT  CreateDataCache( LPUNKNOWN pUnkOuter,  const IID * const rclsid,
                           const IID * const iid,  LPVOID * ppv);
extern  HRESULT  StgCreateDocfile(  const WCHAR* pwcsName,
             DWORD grfMode,
             DWORD reserved,
             IStorage** ppstgOpen);
extern  HRESULT  StgCreateDocfileOnILockBytes( ILockBytes* plkbyt,
                     DWORD grfMode,
                     DWORD reserved,
                     IStorage** ppstgOpen);
extern  HRESULT  StgOpenStorage(  const WCHAR* pwcsName,
               IStorage* pstgPriority,
               DWORD grfMode,
               SNB snbExclude,
               DWORD reserved,
               IStorage** ppstgOpen);
extern  HRESULT  StgOpenStorageOnILockBytes( ILockBytes* plkbyt,
                   IStorage* pstgPriority,
                   DWORD grfMode,
                   SNB snbExclude,
                   DWORD reserved,
                   IStorage** ppstgOpen);
extern  HRESULT  StgIsStorageFile(  const WCHAR* pwcsName);
extern  HRESULT  StgIsStorageILockBytes( ILockBytes* plkbyt);
extern  HRESULT  StgSetTimes(  const WCHAR* lpszName,
                    const FILETIME* pctime,
                    const FILETIME* patime,
                    const FILETIME* pmtime);
extern  HRESULT  StgOpenAsyncDocfileOnIFillLockBytes(  IFillLockBytes *pflb,
              DWORD grfMode,
              DWORD asyncFlags,
              IStorage** ppstgOpen);
extern  HRESULT  StgGetIFillLockBytesOnILockBytes(  ILockBytes *pilb,
              IFillLockBytes** ppflb);
extern  HRESULT  StgGetIFillLockBytesOnFile(  OLECHAR const *pwcsName,
              IFillLockBytes** ppflb);
extern  HRESULT  StgOpenLayoutDocfile(  OLECHAR const *pwcsDfName,
              DWORD grfMode,
              DWORD reserved,
              IStorage** ppstgOpen);
typedef struct tagSTGOPTIONS
{
    USHORT usVersion;
    USHORT reserved;
    ULONG ulSectorSize;
    const WCHAR *pwcsTemplateFile;
} STGOPTIONS;
extern  HRESULT  StgCreateStorageEx (  const WCHAR* pwcsName,
             DWORD grfMode,
             DWORD stgfmt,
             DWORD grfAttrs,
             STGOPTIONS* pStgOptions,
             PSECURITY_DESCRIPTOR pSecurityDescriptor,
             const IID * const riid,
             void** ppObjectOpen);
extern  HRESULT  StgOpenStorageEx (  const WCHAR* pwcsName,
             DWORD grfMode,
             DWORD stgfmt,
             DWORD grfAttrs,
             STGOPTIONS* pStgOptions,
             PSECURITY_DESCRIPTOR pSecurityDescriptor,
             const IID * const riid,
             void** ppObjectOpen);
extern  HRESULT   BindMoniker( LPMONIKER pmk,  DWORD grfOpt,  const IID * const iidResult,  LPVOID * ppvResult);
extern  HRESULT   CoInstall(
     IBindCtx     * pbc,
     DWORD          dwFlags,
     uCLSSPEC     * pClassSpec,
     QUERYCONTEXT * pQuery,
     LPWSTR         pszCodeBase);
extern  HRESULT   CoGetObject( LPCWSTR pszName,  BIND_OPTS *pBindOptions,  const IID * const riid,  void **ppv);
extern  HRESULT   MkParseDisplayName( LPBC pbc,  LPCOLESTR szUserName,
                 ULONG  * pchEaten,  LPMONIKER  * ppmk);
extern  HRESULT   MonikerRelativePathTo( LPMONIKER pmkSrc,  LPMONIKER pmkDest,  LPMONIKER
                * ppmkRelPath,  BOOL dwReserved);
extern  HRESULT   MonikerCommonPrefixWith( LPMONIKER pmkThis,  LPMONIKER pmkOther,
                 LPMONIKER * ppmkCommon);
extern  HRESULT   CreateBindCtx( DWORD reserved,  LPBC * ppbc);
extern  HRESULT   CreateGenericComposite( LPMONIKER pmkFirst,  LPMONIKER pmkRest,
     LPMONIKER * ppmkComposite);
extern  HRESULT   GetClassFile ( LPCOLESTR szFilename,  CLSID * pclsid);
extern  HRESULT   CreateClassMoniker( const IID * const rclsid,  LPMONIKER * ppmk);
extern  HRESULT   CreateFileMoniker( LPCOLESTR lpszPathName,  LPMONIKER * ppmk);
extern  HRESULT   CreateItemMoniker( LPCOLESTR lpszDelim,  LPCOLESTR lpszItem,
                           LPMONIKER * ppmk);
extern  HRESULT   CreateAntiMoniker( LPMONIKER * ppmk);
extern  HRESULT   CreatePointerMoniker( LPUNKNOWN punk,  LPMONIKER * ppmk);
extern  HRESULT   CreateObjrefMoniker( LPUNKNOWN punk,  LPMONIKER  * ppmk);
extern  HRESULT   GetRunningObjectTable(  DWORD reserved,  LPRUNNINGOBJECTTABLE * pprot);
typedef struct IPersistMoniker IPersistMoniker;
typedef struct IMonikerProp IMonikerProp;
typedef struct IBindProtocol IBindProtocol;
typedef struct IBinding IBinding;
typedef struct IBindStatusCallback IBindStatusCallback;
typedef struct IAuthenticate IAuthenticate;
typedef struct IHttpNegotiate IHttpNegotiate;
typedef struct IHttpNegotiate2 IHttpNegotiate2;
typedef struct IWinInetFileStream IWinInetFileStream;
typedef struct IWindowForBindingUI IWindowForBindingUI;
typedef struct ICodeInstall ICodeInstall;
typedef struct IUri IUri;
typedef struct IUriContainer IUriContainer;
typedef struct IUriBuilder IUriBuilder;
typedef struct IUriBuilderFactory IUriBuilderFactory;
typedef struct IWinInetInfo IWinInetInfo;
typedef struct IHttpSecurity IHttpSecurity;
typedef struct IWinInetHttpInfo IWinInetHttpInfo;
typedef struct IWinInetCacheHints IWinInetCacheHints;
typedef struct IWinInetCacheHints2 IWinInetCacheHints2;
typedef struct IBindHost IBindHost;
typedef struct IInternet IInternet;
typedef struct IInternetBindInfo IInternetBindInfo;
typedef struct IInternetProtocolRoot IInternetProtocolRoot;
typedef struct IInternetProtocol IInternetProtocol;
typedef struct IInternetProtocolEx IInternetProtocolEx;
typedef struct IInternetProtocolSink IInternetProtocolSink;
typedef struct IInternetProtocolSinkStackable IInternetProtocolSinkStackable;
typedef struct IInternetSession IInternetSession;
typedef struct IInternetThreadSwitch IInternetThreadSwitch;
typedef struct IInternetPriority IInternetPriority;
typedef struct IInternetProtocolInfo IInternetProtocolInfo;
typedef struct IInternetSecurityMgrSite IInternetSecurityMgrSite;
typedef struct IInternetSecurityManager IInternetSecurityManager;
typedef struct IInternetSecurityManagerEx IInternetSecurityManagerEx;
typedef struct IInternetSecurityManagerEx2 IInternetSecurityManagerEx2;
typedef struct IZoneIdentifier IZoneIdentifier;
typedef struct IInternetHostSecurityManager IInternetHostSecurityManager;
typedef struct IInternetZoneManager IInternetZoneManager;
typedef struct IInternetZoneManagerEx IInternetZoneManagerEx;
typedef struct IInternetZoneManagerEx2 IInternetZoneManagerEx2;
typedef struct ISoftDistExt ISoftDistExt;
typedef struct ICatalogFileInfo ICatalogFileInfo;
typedef struct IDataFilter IDataFilter;
typedef struct IEncodingFilterFactory IEncodingFilterFactory;
typedef struct IWrappedProtocol IWrappedProtocol;
typedef struct IOleAdviseHolder IOleAdviseHolder;
typedef struct IOleCache IOleCache;
typedef struct IOleCache2 IOleCache2;
typedef struct IOleCacheControl IOleCacheControl;
typedef struct IParseDisplayName IParseDisplayName;
typedef struct IOleContainer IOleContainer;
typedef struct IOleClientSite IOleClientSite;
typedef struct IOleObject IOleObject;
typedef struct IOleWindow IOleWindow;
typedef struct IOleLink IOleLink;
typedef struct IOleItemContainer IOleItemContainer;
typedef struct IOleInPlaceUIWindow IOleInPlaceUIWindow;
typedef struct IOleInPlaceActiveObject IOleInPlaceActiveObject;
typedef struct IOleInPlaceFrame IOleInPlaceFrame;
typedef struct IOleInPlaceObject IOleInPlaceObject;
typedef struct IOleInPlaceSite IOleInPlaceSite;
typedef struct IContinue IContinue;
typedef struct IViewObject IViewObject;
typedef struct IViewObject2 IViewObject2;
typedef struct IDropSource IDropSource;
typedef struct IDropTarget IDropTarget;
typedef struct IDropSourceNotify IDropSourceNotify;
typedef struct IEnumOLEVERB IEnumOLEVERB;
extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_0000_v0_0_s_ifspec;
typedef  IOleAdviseHolder *LPOLEADVISEHOLDER;
extern const IID IID_IOleAdviseHolder;
    typedef struct IOleAdviseHolderVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleAdviseHolder * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleAdviseHolder * This);
        ULONG (  *Release )(
            IOleAdviseHolder * This);
        HRESULT (  *Advise )(
            IOleAdviseHolder * This,
             IAdviseSink *pAdvise,
             DWORD *pdwConnection);
        HRESULT (  *Unadvise )(
            IOleAdviseHolder * This,
             DWORD dwConnection);
        HRESULT (  *EnumAdvise )(
            IOleAdviseHolder * This,
             IEnumSTATDATA **ppenumAdvise);
        HRESULT (  *SendOnRename )(
            IOleAdviseHolder * This,
             IMoniker *pmk);
        HRESULT (  *SendOnSave )(
            IOleAdviseHolder * This);
        HRESULT (  *SendOnClose )(
            IOleAdviseHolder * This);
    } IOleAdviseHolderVtbl;
    struct IOleAdviseHolder
    {
         struct IOleAdviseHolderVtbl *lpVtbl;
    };
typedef    IOleCache *LPOLECACHE;
extern const IID IID_IOleCache;
    typedef struct IOleCacheVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleCache * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleCache * This);
        ULONG (  *Release )(
            IOleCache * This);
        HRESULT (  *Cache )(
            IOleCache * This,
              FORMATETC *pformatetc,
             DWORD advf,
              DWORD *pdwConnection);
        HRESULT (  *Uncache )(
            IOleCache * This,
             DWORD dwConnection);
        HRESULT (  *EnumCache )(
            IOleCache * This,
              IEnumSTATDATA **ppenumSTATDATA);
        HRESULT (  *InitCache )(
            IOleCache * This,
              IDataObject *pDataObject);
        HRESULT (  *SetData )(
            IOleCache * This,
              FORMATETC *pformatetc,
              STGMEDIUM *pmedium,
             BOOL fRelease);
    } IOleCacheVtbl;
    struct IOleCache
    {
         struct IOleCacheVtbl *lpVtbl;
    };
typedef    IOleCache2 *LPOLECACHE2;
typedef
enum tagDISCARDCACHE
    {	DISCARDCACHE_SAVEIFDIRTY	= 0,
	DISCARDCACHE_NOSAVE	= 1
    } 	DISCARDCACHE;
extern const IID IID_IOleCache2;
    typedef struct IOleCache2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IOleCache2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleCache2 * This);
        ULONG (  *Release )(
            IOleCache2 * This);
        HRESULT (  *Cache )(
            IOleCache2 * This,
              FORMATETC *pformatetc,
             DWORD advf,
              DWORD *pdwConnection);
        HRESULT (  *Uncache )(
            IOleCache2 * This,
             DWORD dwConnection);
        HRESULT (  *EnumCache )(
            IOleCache2 * This,
              IEnumSTATDATA **ppenumSTATDATA);
        HRESULT (  *InitCache )(
            IOleCache2 * This,
              IDataObject *pDataObject);
        HRESULT (  *SetData )(
            IOleCache2 * This,
              FORMATETC *pformatetc,
              STGMEDIUM *pmedium,
             BOOL fRelease);
         HRESULT (  *UpdateCache )(
            IOleCache2 * This,
             LPDATAOBJECT pDataObject,
             DWORD grfUpdf,
             LPVOID pReserved);
        HRESULT (  *DiscardCache )(
            IOleCache2 * This,
             DWORD dwDiscardOptions);
    } IOleCache2Vtbl;
    struct IOleCache2
    {
         struct IOleCache2Vtbl *lpVtbl;
    };
 HRESULT  IOleCache2_RemoteUpdateCache_Proxy(
    IOleCache2 * This,
      LPDATAOBJECT pDataObject,
     DWORD grfUpdf,
     LONG_PTR pReserved);
void  IOleCache2_RemoteUpdateCache_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IOleCacheControl *LPOLECACHECONTROL;
extern const IID IID_IOleCacheControl;
    typedef struct IOleCacheControlVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleCacheControl * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleCacheControl * This);
        ULONG (  *Release )(
            IOleCacheControl * This);
        HRESULT (  *OnRun )(
            IOleCacheControl * This,
             LPDATAOBJECT pDataObject);
        HRESULT (  *OnStop )(
            IOleCacheControl * This);
    } IOleCacheControlVtbl;
    struct IOleCacheControl
    {
         struct IOleCacheControlVtbl *lpVtbl;
    };
typedef    IParseDisplayName *LPPARSEDISPLAYNAME;
extern const IID IID_IParseDisplayName;
    typedef struct IParseDisplayNameVtbl
    {
        HRESULT (  *QueryInterface )(
            IParseDisplayName * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IParseDisplayName * This);
        ULONG (  *Release )(
            IParseDisplayName * This);
        HRESULT (  *ParseDisplayName )(
            IParseDisplayName * This,
              IBindCtx *pbc,
              LPOLESTR pszDisplayName,
              ULONG *pchEaten,
              IMoniker **ppmkOut);
    } IParseDisplayNameVtbl;
    struct IParseDisplayName
    {
         struct IParseDisplayNameVtbl *lpVtbl;
    };
typedef    IOleContainer *LPOLECONTAINER;
extern const IID IID_IOleContainer;
    typedef struct IOleContainerVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleContainer * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleContainer * This);
        ULONG (  *Release )(
            IOleContainer * This);
        HRESULT (  *ParseDisplayName )(
            IOleContainer * This,
              IBindCtx *pbc,
              LPOLESTR pszDisplayName,
              ULONG *pchEaten,
              IMoniker **ppmkOut);
        HRESULT (  *EnumObjects )(
            IOleContainer * This,
             DWORD grfFlags,
              IEnumUnknown **ppenum);
        HRESULT (  *LockContainer )(
            IOleContainer * This,
             BOOL fLock);
    } IOleContainerVtbl;
    struct IOleContainer
    {
         struct IOleContainerVtbl *lpVtbl;
    };
typedef    IOleClientSite *LPOLECLIENTSITE;
extern const IID IID_IOleClientSite;
    typedef struct IOleClientSiteVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleClientSite * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleClientSite * This);
        ULONG (  *Release )(
            IOleClientSite * This);
        HRESULT (  *SaveObject )(
            IOleClientSite * This);
        HRESULT (  *GetMoniker )(
            IOleClientSite * This,
             DWORD dwAssign,
             DWORD dwWhichMoniker,
              IMoniker **ppmk);
        HRESULT (  *GetContainer )(
            IOleClientSite * This,
              IOleContainer **ppContainer);
        HRESULT (  *ShowObject )(
            IOleClientSite * This);
        HRESULT (  *OnShowWindow )(
            IOleClientSite * This,
             BOOL fShow);
        HRESULT (  *RequestNewObjectLayout )(
            IOleClientSite * This);
    } IOleClientSiteVtbl;
    struct IOleClientSite
    {
         struct IOleClientSiteVtbl *lpVtbl;
    };
typedef    IOleObject *LPOLEOBJECT;
typedef
enum tagOLEGETMONIKER
    {	OLEGETMONIKER_ONLYIFTHERE	= 1,
	OLEGETMONIKER_FORCEASSIGN	= 2,
	OLEGETMONIKER_UNASSIGN	= 3,
	OLEGETMONIKER_TEMPFORUSER	= 4
    } 	OLEGETMONIKER;
typedef
enum tagOLEWHICHMK
    {	OLEWHICHMK_CONTAINER	= 1,
	OLEWHICHMK_OBJREL	= 2,
	OLEWHICHMK_OBJFULL	= 3
    } 	OLEWHICHMK;
typedef
enum tagUSERCLASSTYPE
    {	USERCLASSTYPE_FULL	= 1,
	USERCLASSTYPE_SHORT	= 2,
	USERCLASSTYPE_APPNAME	= 3
    } 	USERCLASSTYPE;
typedef
enum tagOLEMISC
    {	OLEMISC_RECOMPOSEONRESIZE	= 0x1,
	OLEMISC_ONLYICONIC	= 0x2,
	OLEMISC_INSERTNOTREPLACE	= 0x4,
	OLEMISC_STATIC	= 0x8,
	OLEMISC_CANTLINKINSIDE	= 0x10,
	OLEMISC_CANLINKBYOLE1	= 0x20,
	OLEMISC_ISLINKOBJECT	= 0x40,
	OLEMISC_INSIDEOUT	= 0x80,
	OLEMISC_ACTIVATEWHENVISIBLE	= 0x100,
	OLEMISC_RENDERINGISDEVICEINDEPENDENT	= 0x200,
	OLEMISC_INVISIBLEATRUNTIME	= 0x400,
	OLEMISC_ALWAYSRUN	= 0x800,
	OLEMISC_ACTSLIKEBUTTON	= 0x1000,
	OLEMISC_ACTSLIKELABEL	= 0x2000,
	OLEMISC_NOUIACTIVATE	= 0x4000,
	OLEMISC_ALIGNABLE	= 0x8000,
	OLEMISC_SIMPLEFRAME	= 0x10000,
	OLEMISC_SETCLIENTSITEFIRST	= 0x20000,
	OLEMISC_IMEMODE	= 0x40000,
	OLEMISC_IGNOREACTIVATEWHENVISIBLE	= 0x80000,
	OLEMISC_WANTSTOMENUMERGE	= 0x100000,
	OLEMISC_SUPPORTSMULTILEVELUNDO	= 0x200000
    } 	OLEMISC;
typedef
enum tagOLECLOSE
    {	OLECLOSE_SAVEIFDIRTY	= 0,
	OLECLOSE_NOSAVE	= 1,
	OLECLOSE_PROMPTSAVE	= 2
    } 	OLECLOSE;
extern const IID IID_IOleObject;
    typedef struct IOleObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleObject * This);
        ULONG (  *Release )(
            IOleObject * This);
        HRESULT (  *SetClientSite )(
            IOleObject * This,
              IOleClientSite *pClientSite);
        HRESULT (  *GetClientSite )(
            IOleObject * This,
              IOleClientSite **ppClientSite);
        HRESULT (  *SetHostNames )(
            IOleObject * This,
              LPCOLESTR szContainerApp,
              LPCOLESTR szContainerObj);
        HRESULT (  *Close )(
            IOleObject * This,
             DWORD dwSaveOption);
        HRESULT (  *SetMoniker )(
            IOleObject * This,
             DWORD dwWhichMoniker,
              IMoniker *pmk);
        HRESULT (  *GetMoniker )(
            IOleObject * This,
             DWORD dwAssign,
             DWORD dwWhichMoniker,
              IMoniker **ppmk);
        HRESULT (  *InitFromData )(
            IOleObject * This,
              IDataObject *pDataObject,
             BOOL fCreation,
             DWORD dwReserved);
        HRESULT (  *GetClipboardData )(
            IOleObject * This,
             DWORD dwReserved,
              IDataObject **ppDataObject);
        HRESULT (  *DoVerb )(
            IOleObject * This,
             LONG iVerb,
              LPMSG lpmsg,
              IOleClientSite *pActiveSite,
             LONG lindex,
              HWND hwndParent,
              LPCRECT lprcPosRect);
        HRESULT (  *EnumVerbs )(
            IOleObject * This,
              IEnumOLEVERB **ppEnumOleVerb);
        HRESULT (  *Update )(
            IOleObject * This);
        HRESULT (  *IsUpToDate )(
            IOleObject * This);
        HRESULT (  *GetUserClassID )(
            IOleObject * This,
              CLSID *pClsid);
        HRESULT (  *GetUserType )(
            IOleObject * This,
             DWORD dwFormOfType,
              LPOLESTR *pszUserType);
        HRESULT (  *SetExtent )(
            IOleObject * This,
             DWORD dwDrawAspect,
              SIZEL *psizel);
        HRESULT (  *GetExtent )(
            IOleObject * This,
             DWORD dwDrawAspect,
              SIZEL *psizel);
        HRESULT (  *Advise )(
            IOleObject * This,
              IAdviseSink *pAdvSink,
              DWORD *pdwConnection);
        HRESULT (  *Unadvise )(
            IOleObject * This,
             DWORD dwConnection);
        HRESULT (  *EnumAdvise )(
            IOleObject * This,
              IEnumSTATDATA **ppenumAdvise);
        HRESULT (  *GetMiscStatus )(
            IOleObject * This,
             DWORD dwAspect,
              DWORD *pdwStatus);
        HRESULT (  *SetColorScheme )(
            IOleObject * This,
              LOGPALETTE *pLogpal);
    } IOleObjectVtbl;
    struct IOleObject
    {
         struct IOleObjectVtbl *lpVtbl;
    };
typedef
enum tagOLERENDER
    {	OLERENDER_NONE	= 0,
	OLERENDER_DRAW	= 1,
	OLERENDER_FORMAT	= 2,
	OLERENDER_ASIS	= 3
    } 	OLERENDER;
typedef OLERENDER *LPOLERENDER;
typedef struct tagOBJECTDESCRIPTOR
    {
    ULONG cbSize;
    CLSID clsid;
    DWORD dwDrawAspect;
    SIZEL sizel;
    POINTL pointl;
    DWORD dwStatus;
    DWORD dwFullUserTypeName;
    DWORD dwSrcOfCopy;
    } 	OBJECTDESCRIPTOR;
typedef struct tagOBJECTDESCRIPTOR *POBJECTDESCRIPTOR;
typedef struct tagOBJECTDESCRIPTOR *LPOBJECTDESCRIPTOR;
typedef struct tagOBJECTDESCRIPTOR LINKSRCDESCRIPTOR;
typedef struct tagOBJECTDESCRIPTOR *PLINKSRCDESCRIPTOR;
typedef struct tagOBJECTDESCRIPTOR *LPLINKSRCDESCRIPTOR;
extern RPC_IF_HANDLE IOLETypes_v0_0_c_ifspec;
extern RPC_IF_HANDLE IOLETypes_v0_0_s_ifspec;
typedef    IOleWindow *LPOLEWINDOW;
extern const IID IID_IOleWindow;
    typedef struct IOleWindowVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleWindow * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleWindow * This);
        ULONG (  *Release )(
            IOleWindow * This);
         HRESULT (  *GetWindow )(
            IOleWindow * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleWindow * This,
             BOOL fEnterMode);
    } IOleWindowVtbl;
    struct IOleWindow
    {
         struct IOleWindowVtbl *lpVtbl;
    };
typedef    IOleLink *LPOLELINK;
typedef
enum tagOLEUPDATE
    {	OLEUPDATE_ALWAYS	= 1,
	OLEUPDATE_ONCALL	= 3
    } 	OLEUPDATE;
typedef OLEUPDATE *LPOLEUPDATE;
typedef OLEUPDATE *POLEUPDATE;
typedef
enum tagOLELINKBIND
    {	OLELINKBIND_EVENIFCLASSDIFF	= 1
    } 	OLELINKBIND;
extern const IID IID_IOleLink;
    typedef struct IOleLinkVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleLink * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleLink * This);
        ULONG (  *Release )(
            IOleLink * This);
        HRESULT (  *SetUpdateOptions )(
            IOleLink * This,
             DWORD dwUpdateOpt);
        HRESULT (  *GetUpdateOptions )(
            IOleLink * This,
              DWORD *pdwUpdateOpt);
        HRESULT (  *SetSourceMoniker )(
            IOleLink * This,
              IMoniker *pmk,
              const IID * const rclsid);
        HRESULT (  *GetSourceMoniker )(
            IOleLink * This,
              IMoniker **ppmk);
        HRESULT (  *SetSourceDisplayName )(
            IOleLink * This,
              LPCOLESTR pszStatusText);
        HRESULT (  *GetSourceDisplayName )(
            IOleLink * This,
              LPOLESTR *ppszDisplayName);
        HRESULT (  *BindToSource )(
            IOleLink * This,
             DWORD bindflags,
              IBindCtx *pbc);
        HRESULT (  *BindIfRunning )(
            IOleLink * This);
        HRESULT (  *GetBoundSource )(
            IOleLink * This,
              IUnknown **ppunk);
        HRESULT (  *UnbindSource )(
            IOleLink * This);
        HRESULT (  *Update )(
            IOleLink * This,
              IBindCtx *pbc);
    } IOleLinkVtbl;
    struct IOleLink
    {
         struct IOleLinkVtbl *lpVtbl;
    };
typedef    IOleItemContainer *LPOLEITEMCONTAINER;
typedef
enum tagBINDSPEED
    {	BINDSPEED_INDEFINITE	= 1,
	BINDSPEED_MODERATE	= 2,
	BINDSPEED_IMMEDIATE	= 3
    } 	BINDSPEED;
typedef
enum tagOLECONTF
    {	OLECONTF_EMBEDDINGS	= 1,
	OLECONTF_LINKS	= 2,
	OLECONTF_OTHERS	= 4,
	OLECONTF_ONLYUSER	= 8,
	OLECONTF_ONLYIFRUNNING	= 16
    } 	OLECONTF;
extern const IID IID_IOleItemContainer;
    typedef struct IOleItemContainerVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleItemContainer * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleItemContainer * This);
        ULONG (  *Release )(
            IOleItemContainer * This);
        HRESULT (  *ParseDisplayName )(
            IOleItemContainer * This,
              IBindCtx *pbc,
              LPOLESTR pszDisplayName,
              ULONG *pchEaten,
              IMoniker **ppmkOut);
        HRESULT (  *EnumObjects )(
            IOleItemContainer * This,
             DWORD grfFlags,
              IEnumUnknown **ppenum);
        HRESULT (  *LockContainer )(
            IOleItemContainer * This,
             BOOL fLock);
        HRESULT (  *GetObjectA )(
            IOleItemContainer * This,
              LPOLESTR pszItem,
             DWORD dwSpeedNeeded,
              IBindCtx *pbc,
              const IID * const riid,
              void **ppvObject);
        HRESULT (  *GetObjectStorage )(
            IOleItemContainer * This,
              LPOLESTR pszItem,
              IBindCtx *pbc,
              const IID * const riid,
              void **ppvStorage);
        HRESULT (  *IsRunning )(
            IOleItemContainer * This,
              LPOLESTR pszItem);
    } IOleItemContainerVtbl;
    struct IOleItemContainer
    {
         struct IOleItemContainerVtbl *lpVtbl;
    };
typedef    IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
typedef RECT BORDERWIDTHS;
typedef LPRECT LPBORDERWIDTHS;
typedef LPCRECT LPCBORDERWIDTHS;
extern const IID IID_IOleInPlaceUIWindow;
    typedef struct IOleInPlaceUIWindowVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleInPlaceUIWindow * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleInPlaceUIWindow * This);
        ULONG (  *Release )(
            IOleInPlaceUIWindow * This);
         HRESULT (  *GetWindow )(
            IOleInPlaceUIWindow * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleInPlaceUIWindow * This,
             BOOL fEnterMode);
         HRESULT (  *GetBorder )(
            IOleInPlaceUIWindow * This,
              LPRECT lprectBorder);
         HRESULT (  *RequestBorderSpace )(
            IOleInPlaceUIWindow * This,
              LPCBORDERWIDTHS pborderwidths);
         HRESULT (  *SetBorderSpace )(
            IOleInPlaceUIWindow * This,
              LPCBORDERWIDTHS pborderwidths);
        HRESULT (  *SetActiveObject )(
            IOleInPlaceUIWindow * This,
              IOleInPlaceActiveObject *pActiveObject,
              LPCOLESTR pszObjName);
    } IOleInPlaceUIWindowVtbl;
    struct IOleInPlaceUIWindow
    {
         struct IOleInPlaceUIWindowVtbl *lpVtbl;
    };
typedef    IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
extern const IID IID_IOleInPlaceActiveObject;
    typedef struct IOleInPlaceActiveObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleInPlaceActiveObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleInPlaceActiveObject * This);
        ULONG (  *Release )(
            IOleInPlaceActiveObject * This);
         HRESULT (  *GetWindow )(
            IOleInPlaceActiveObject * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleInPlaceActiveObject * This,
             BOOL fEnterMode);
         HRESULT (  *TranslateAcceleratorA )(
            IOleInPlaceActiveObject * This,
             LPMSG lpmsg);
         HRESULT (  *OnFrameWindowActivate )(
            IOleInPlaceActiveObject * This,
             BOOL fActivate);
         HRESULT (  *OnDocWindowActivate )(
            IOleInPlaceActiveObject * This,
             BOOL fActivate);
         HRESULT (  *ResizeBorder )(
            IOleInPlaceActiveObject * This,
             LPCRECT prcBorder,
             IOleInPlaceUIWindow *pUIWindow,
             BOOL fFrameWindow);
        HRESULT (  *EnableModeless )(
            IOleInPlaceActiveObject * This,
             BOOL fEnable);
    } IOleInPlaceActiveObjectVtbl;
    struct IOleInPlaceActiveObject
    {
         struct IOleInPlaceActiveObjectVtbl *lpVtbl;
    };
 HRESULT  IOleInPlaceActiveObject_RemoteTranslateAccelerator_Proxy(
    IOleInPlaceActiveObject * This);
void  IOleInPlaceActiveObject_RemoteTranslateAccelerator_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IOleInPlaceActiveObject_RemoteResizeBorder_Proxy(
    IOleInPlaceActiveObject * This,
      LPCRECT prcBorder,
      const IID * const riid,
      IOleInPlaceUIWindow *pUIWindow,
     BOOL fFrameWindow);
void  IOleInPlaceActiveObject_RemoteResizeBorder_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IOleInPlaceFrame *LPOLEINPLACEFRAME;
typedef struct tagOIFI
    {
    UINT cb;
    BOOL fMDIApp;
    HWND hwndFrame;
    HACCEL haccel;
    UINT cAccelEntries;
    } 	OLEINPLACEFRAMEINFO;
typedef struct tagOIFI *LPOLEINPLACEFRAMEINFO;
typedef struct tagOleMenuGroupWidths
    {
    LONG width[ 6 ];
    } 	OLEMENUGROUPWIDTHS;
typedef struct tagOleMenuGroupWidths *LPOLEMENUGROUPWIDTHS;
typedef HGLOBAL HOLEMENU;
extern const IID IID_IOleInPlaceFrame;
    typedef struct IOleInPlaceFrameVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleInPlaceFrame * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleInPlaceFrame * This);
        ULONG (  *Release )(
            IOleInPlaceFrame * This);
         HRESULT (  *GetWindow )(
            IOleInPlaceFrame * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleInPlaceFrame * This,
             BOOL fEnterMode);
         HRESULT (  *GetBorder )(
            IOleInPlaceFrame * This,
              LPRECT lprectBorder);
         HRESULT (  *RequestBorderSpace )(
            IOleInPlaceFrame * This,
              LPCBORDERWIDTHS pborderwidths);
         HRESULT (  *SetBorderSpace )(
            IOleInPlaceFrame * This,
              LPCBORDERWIDTHS pborderwidths);
        HRESULT (  *SetActiveObject )(
            IOleInPlaceFrame * This,
              IOleInPlaceActiveObject *pActiveObject,
              LPCOLESTR pszObjName);
        HRESULT (  *InsertMenus )(
            IOleInPlaceFrame * This,
              HMENU hmenuShared,
              LPOLEMENUGROUPWIDTHS lpMenuWidths);
         HRESULT (  *SetMenu )(
            IOleInPlaceFrame * This,
              HMENU hmenuShared,
              HOLEMENU holemenu,
              HWND hwndActiveObject);
        HRESULT (  *RemoveMenus )(
            IOleInPlaceFrame * This,
              HMENU hmenuShared);
         HRESULT (  *SetStatusText )(
            IOleInPlaceFrame * This,
              LPCOLESTR pszStatusText);
        HRESULT (  *EnableModeless )(
            IOleInPlaceFrame * This,
             BOOL fEnable);
        HRESULT (  *TranslateAcceleratorA )(
            IOleInPlaceFrame * This,
              LPMSG lpmsg,
             WORD wID);
    } IOleInPlaceFrameVtbl;
    struct IOleInPlaceFrame
    {
         struct IOleInPlaceFrameVtbl *lpVtbl;
    };
typedef    IOleInPlaceObject *LPOLEINPLACEOBJECT;
extern const IID IID_IOleInPlaceObject;
    typedef struct IOleInPlaceObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleInPlaceObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleInPlaceObject * This);
        ULONG (  *Release )(
            IOleInPlaceObject * This);
         HRESULT (  *GetWindow )(
            IOleInPlaceObject * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleInPlaceObject * This,
             BOOL fEnterMode);
        HRESULT (  *InPlaceDeactivate )(
            IOleInPlaceObject * This);
        HRESULT (  *UIDeactivate )(
            IOleInPlaceObject * This);
         HRESULT (  *SetObjectRects )(
            IOleInPlaceObject * This,
              LPCRECT lprcPosRect,
              LPCRECT lprcClipRect);
        HRESULT (  *ReactivateAndUndo )(
            IOleInPlaceObject * This);
    } IOleInPlaceObjectVtbl;
    struct IOleInPlaceObject
    {
         struct IOleInPlaceObjectVtbl *lpVtbl;
    };
typedef    IOleInPlaceSite *LPOLEINPLACESITE;
extern const IID IID_IOleInPlaceSite;
    typedef struct IOleInPlaceSiteVtbl
    {
        HRESULT (  *QueryInterface )(
            IOleInPlaceSite * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IOleInPlaceSite * This);
        ULONG (  *Release )(
            IOleInPlaceSite * This);
         HRESULT (  *GetWindow )(
            IOleInPlaceSite * This,
              HWND *phwnd);
        HRESULT (  *ContextSensitiveHelp )(
            IOleInPlaceSite * This,
             BOOL fEnterMode);
        HRESULT (  *CanInPlaceActivate )(
            IOleInPlaceSite * This);
        HRESULT (  *OnInPlaceActivate )(
            IOleInPlaceSite * This);
        HRESULT (  *OnUIActivate )(
            IOleInPlaceSite * This);
        HRESULT (  *GetWindowContext )(
            IOleInPlaceSite * This,
              IOleInPlaceFrame **ppFrame,
              IOleInPlaceUIWindow **ppDoc,
              LPRECT lprcPosRect,
              LPRECT lprcClipRect,
              LPOLEINPLACEFRAMEINFO lpFrameInfo);
        HRESULT (  *Scroll )(
            IOleInPlaceSite * This,
             SIZE scrollExtant);
        HRESULT (  *OnUIDeactivate )(
            IOleInPlaceSite * This,
             BOOL fUndoable);
        HRESULT (  *OnInPlaceDeactivate )(
            IOleInPlaceSite * This);
        HRESULT (  *DiscardUndoState )(
            IOleInPlaceSite * This);
        HRESULT (  *DeactivateAndUndo )(
            IOleInPlaceSite * This);
        HRESULT (  *OnPosRectChange )(
            IOleInPlaceSite * This,
              LPCRECT lprcPosRect);
    } IOleInPlaceSiteVtbl;
    struct IOleInPlaceSite
    {
         struct IOleInPlaceSiteVtbl *lpVtbl;
    };
extern const IID IID_IContinue;
    typedef struct IContinueVtbl
    {
        HRESULT (  *QueryInterface )(
            IContinue * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IContinue * This);
        ULONG (  *Release )(
            IContinue * This);
        HRESULT (  *FContinue )(
            IContinue * This);
    } IContinueVtbl;
    struct IContinue
    {
         struct IContinueVtbl *lpVtbl;
    };
typedef    IViewObject *LPVIEWOBJECT;
extern const IID IID_IViewObject;
    typedef struct IViewObjectVtbl
    {
        HRESULT (  *QueryInterface )(
            IViewObject * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IViewObject * This);
        ULONG (  *Release )(
            IViewObject * This);
         HRESULT (  *Draw )(
            IViewObject * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DVTARGETDEVICE *ptd,
             HDC hdcTargetDev,
             HDC hdcDraw,
             LPCRECTL lprcBounds,
             LPCRECTL lprcWBounds,
             BOOL (  *pfnContinue )(
                ULONG_PTR dwContinue),
             ULONG_PTR dwContinue);
         HRESULT (  *GetColorSet )(
            IViewObject * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DVTARGETDEVICE *ptd,
             HDC hicTargetDev,
             LOGPALETTE **ppColorSet);
         HRESULT (  *Freeze )(
            IViewObject * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DWORD *pdwFreeze);
        HRESULT (  *Unfreeze )(
            IViewObject * This,
             DWORD dwFreeze);
        HRESULT (  *SetAdvise )(
            IViewObject * This,
             DWORD aspects,
             DWORD advf,
              IAdviseSink *pAdvSink);
         HRESULT (  *GetAdvise )(
            IViewObject * This,
             DWORD *pAspects,
             DWORD *pAdvf,
             IAdviseSink **ppAdvSink);
    } IViewObjectVtbl;
    struct IViewObject
    {
         struct IViewObjectVtbl *lpVtbl;
    };
 HRESULT  IViewObject_RemoteDraw_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DVTARGETDEVICE *ptd,
      HDC hdcTargetDev,
      HDC hdcDraw,
      LPCRECTL lprcBounds,
      LPCRECTL lprcWBounds,
      IContinue *pContinue);
void  IViewObject_RemoteDraw_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IViewObject_RemoteGetColorSet_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DVTARGETDEVICE *ptd,
     ULONG_PTR hicTargetDev,
      LOGPALETTE **ppColorSet);
void  IViewObject_RemoteGetColorSet_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IViewObject_RemoteFreeze_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DWORD *pdwFreeze);
void  IViewObject_RemoteFreeze_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IViewObject_RemoteGetAdvise_Proxy(
    IViewObject * This,
      DWORD *pAspects,
      DWORD *pAdvf,
      IAdviseSink **ppAdvSink);
void  IViewObject_RemoteGetAdvise_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IViewObject2 *LPVIEWOBJECT2;
extern const IID IID_IViewObject2;
    typedef struct IViewObject2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IViewObject2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IViewObject2 * This);
        ULONG (  *Release )(
            IViewObject2 * This);
         HRESULT (  *Draw )(
            IViewObject2 * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DVTARGETDEVICE *ptd,
             HDC hdcTargetDev,
             HDC hdcDraw,
             LPCRECTL lprcBounds,
             LPCRECTL lprcWBounds,
             BOOL (  *pfnContinue )(
                ULONG_PTR dwContinue),
             ULONG_PTR dwContinue);
         HRESULT (  *GetColorSet )(
            IViewObject2 * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DVTARGETDEVICE *ptd,
             HDC hicTargetDev,
             LOGPALETTE **ppColorSet);
         HRESULT (  *Freeze )(
            IViewObject2 * This,
             DWORD dwDrawAspect,
             LONG lindex,
             void *pvAspect,
             DWORD *pdwFreeze);
        HRESULT (  *Unfreeze )(
            IViewObject2 * This,
             DWORD dwFreeze);
        HRESULT (  *SetAdvise )(
            IViewObject2 * This,
             DWORD aspects,
             DWORD advf,
              IAdviseSink *pAdvSink);
         HRESULT (  *GetAdvise )(
            IViewObject2 * This,
             DWORD *pAspects,
             DWORD *pAdvf,
             IAdviseSink **ppAdvSink);
        HRESULT (  *GetExtent )(
            IViewObject2 * This,
             DWORD dwDrawAspect,
             LONG lindex,
              DVTARGETDEVICE *ptd,
              LPSIZEL lpsizel);
    } IViewObject2Vtbl;
    struct IViewObject2
    {
         struct IViewObject2Vtbl *lpVtbl;
    };
typedef  IDropSource *LPDROPSOURCE;
extern const IID IID_IDropSource;
    typedef struct IDropSourceVtbl
    {
        HRESULT (  *QueryInterface )(
            IDropSource * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDropSource * This);
        ULONG (  *Release )(
            IDropSource * This);
        HRESULT (  *QueryContinueDrag )(
            IDropSource * This,
             BOOL fEscapePressed,
             DWORD grfKeyState);
        HRESULT (  *GiveFeedback )(
            IDropSource * This,
             DWORD dwEffect);
    } IDropSourceVtbl;
    struct IDropSource
    {
         struct IDropSourceVtbl *lpVtbl;
    };
typedef    IDropTarget *LPDROPTARGET;
extern const IID IID_IDropTarget;
    typedef struct IDropTargetVtbl
    {
        HRESULT (  *QueryInterface )(
            IDropTarget * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDropTarget * This);
        ULONG (  *Release )(
            IDropTarget * This);
        HRESULT (  *DragEnter )(
            IDropTarget * This,
              IDataObject *pDataObj,
             DWORD grfKeyState,
             POINTL pt,
              DWORD *pdwEffect);
        HRESULT (  *DragOver )(
            IDropTarget * This,
             DWORD grfKeyState,
             POINTL pt,
              DWORD *pdwEffect);
        HRESULT (  *DragLeave )(
            IDropTarget * This);
        HRESULT (  *Drop )(
            IDropTarget * This,
              IDataObject *pDataObj,
             DWORD grfKeyState,
             POINTL pt,
              DWORD *pdwEffect);
    } IDropTargetVtbl;
    struct IDropTarget
    {
         struct IDropTargetVtbl *lpVtbl;
    };
extern const IID IID_IDropSourceNotify;
    typedef struct IDropSourceNotifyVtbl
    {
        HRESULT (  *QueryInterface )(
            IDropSourceNotify * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDropSourceNotify * This);
        ULONG (  *Release )(
            IDropSourceNotify * This);
        HRESULT (  *DragEnterTarget )(
            IDropSourceNotify * This,
             HWND hwndTarget);
        HRESULT (  *DragLeaveTarget )(
            IDropSourceNotify * This);
    } IDropSourceNotifyVtbl;
    struct IDropSourceNotify
    {
         struct IDropSourceNotifyVtbl *lpVtbl;
    };
typedef    IEnumOLEVERB *LPENUMOLEVERB;
typedef struct tagOLEVERB
    {
    LONG lVerb;
    LPOLESTR lpszVerbName;
    DWORD fuFlags;
    DWORD grfAttribs;
    } 	OLEVERB;
typedef struct tagOLEVERB *LPOLEVERB;
typedef
enum tagOLEVERBATTRIB
    {	OLEVERBATTRIB_NEVERDIRTIES	= 1,
	OLEVERBATTRIB_ONCONTAINERMENU	= 2
    } 	OLEVERBATTRIB;
extern const IID IID_IEnumOLEVERB;
    typedef struct IEnumOLEVERBVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumOLEVERB * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumOLEVERB * This);
        ULONG (  *Release )(
            IEnumOLEVERB * This);
         HRESULT (  *Next )(
            IEnumOLEVERB * This,
             ULONG celt,
             LPOLEVERB rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumOLEVERB * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumOLEVERB * This);
        HRESULT (  *Clone )(
            IEnumOLEVERB * This,
              IEnumOLEVERB **ppenum);
    } IEnumOLEVERBVtbl;
    struct IEnumOLEVERB
    {
         struct IEnumOLEVERBVtbl *lpVtbl;
    };
 HRESULT  IEnumOLEVERB_RemoteNext_Proxy(
    IEnumOLEVERB * This,
     ULONG celt,
      LPOLEVERB rgelt,
      ULONG *pceltFetched);
void  IEnumOLEVERB_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
unsigned long               CLIPFORMAT_UserSize(     unsigned long *, unsigned long            , CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserMarshal(  unsigned long *, unsigned char *, CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserUnmarshal(unsigned long *, unsigned char *, CLIPFORMAT * );
void                        CLIPFORMAT_UserFree(     unsigned long *, CLIPFORMAT * );
unsigned long               HACCEL_UserSize(     unsigned long *, unsigned long            , HACCEL * );
unsigned char *   HACCEL_UserMarshal(  unsigned long *, unsigned char *, HACCEL * );
unsigned char *   HACCEL_UserUnmarshal(unsigned long *, unsigned char *, HACCEL * );
void                        HACCEL_UserFree(     unsigned long *, HACCEL * );
unsigned long               HDC_UserSize(     unsigned long *, unsigned long            , HDC * );
unsigned char *   HDC_UserMarshal(  unsigned long *, unsigned char *, HDC * );
unsigned char *   HDC_UserUnmarshal(unsigned long *, unsigned char *, HDC * );
void                        HDC_UserFree(     unsigned long *, HDC * );
unsigned long               HGLOBAL_UserSize(     unsigned long *, unsigned long            , HGLOBAL * );
unsigned char *   HGLOBAL_UserMarshal(  unsigned long *, unsigned char *, HGLOBAL * );
unsigned char *   HGLOBAL_UserUnmarshal(unsigned long *, unsigned char *, HGLOBAL * );
void                        HGLOBAL_UserFree(     unsigned long *, HGLOBAL * );
unsigned long               HMENU_UserSize(     unsigned long *, unsigned long            , HMENU * );
unsigned char *   HMENU_UserMarshal(  unsigned long *, unsigned char *, HMENU * );
unsigned char *   HMENU_UserUnmarshal(unsigned long *, unsigned char *, HMENU * );
void                        HMENU_UserFree(     unsigned long *, HMENU * );
unsigned long               HWND_UserSize(     unsigned long *, unsigned long            , HWND * );
unsigned char *   HWND_UserMarshal(  unsigned long *, unsigned char *, HWND * );
unsigned char *   HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
void                        HWND_UserFree(     unsigned long *, HWND * );
unsigned long               STGMEDIUM_UserSize(     unsigned long *, unsigned long            , STGMEDIUM * );
unsigned char *   STGMEDIUM_UserMarshal(  unsigned long *, unsigned char *, STGMEDIUM * );
unsigned char *   STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, STGMEDIUM * );
void                        STGMEDIUM_UserFree(     unsigned long *, STGMEDIUM * );
unsigned long               CLIPFORMAT_UserSize64(     unsigned long *, unsigned long            , CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserMarshal64(  unsigned long *, unsigned char *, CLIPFORMAT * );
unsigned char *   CLIPFORMAT_UserUnmarshal64(unsigned long *, unsigned char *, CLIPFORMAT * );
void                        CLIPFORMAT_UserFree64(     unsigned long *, CLIPFORMAT * );
unsigned long               HACCEL_UserSize64(     unsigned long *, unsigned long            , HACCEL * );
unsigned char *   HACCEL_UserMarshal64(  unsigned long *, unsigned char *, HACCEL * );
unsigned char *   HACCEL_UserUnmarshal64(unsigned long *, unsigned char *, HACCEL * );
void                        HACCEL_UserFree64(     unsigned long *, HACCEL * );
unsigned long               HDC_UserSize64(     unsigned long *, unsigned long            , HDC * );
unsigned char *   HDC_UserMarshal64(  unsigned long *, unsigned char *, HDC * );
unsigned char *   HDC_UserUnmarshal64(unsigned long *, unsigned char *, HDC * );
void                        HDC_UserFree64(     unsigned long *, HDC * );
unsigned long               HGLOBAL_UserSize64(     unsigned long *, unsigned long            , HGLOBAL * );
unsigned char *   HGLOBAL_UserMarshal64(  unsigned long *, unsigned char *, HGLOBAL * );
unsigned char *   HGLOBAL_UserUnmarshal64(unsigned long *, unsigned char *, HGLOBAL * );
void                        HGLOBAL_UserFree64(     unsigned long *, HGLOBAL * );
unsigned long               HMENU_UserSize64(     unsigned long *, unsigned long            , HMENU * );
unsigned char *   HMENU_UserMarshal64(  unsigned long *, unsigned char *, HMENU * );
unsigned char *   HMENU_UserUnmarshal64(unsigned long *, unsigned char *, HMENU * );
void                        HMENU_UserFree64(     unsigned long *, HMENU * );
unsigned long               HWND_UserSize64(     unsigned long *, unsigned long            , HWND * );
unsigned char *   HWND_UserMarshal64(  unsigned long *, unsigned char *, HWND * );
unsigned char *   HWND_UserUnmarshal64(unsigned long *, unsigned char *, HWND * );
void                        HWND_UserFree64(     unsigned long *, HWND * );
unsigned long               STGMEDIUM_UserSize64(     unsigned long *, unsigned long            , STGMEDIUM * );
unsigned char *   STGMEDIUM_UserMarshal64(  unsigned long *, unsigned char *, STGMEDIUM * );
unsigned char *   STGMEDIUM_UserUnmarshal64(unsigned long *, unsigned char *, STGMEDIUM * );
void                        STGMEDIUM_UserFree64(     unsigned long *, STGMEDIUM * );
 HRESULT  IOleCache2_UpdateCache_Proxy(
    IOleCache2 * This,
     LPDATAOBJECT pDataObject,
     DWORD grfUpdf,
     LPVOID pReserved);
 HRESULT  IOleCache2_UpdateCache_Stub(
    IOleCache2 * This,
      LPDATAOBJECT pDataObject,
     DWORD grfUpdf,
     LONG_PTR pReserved);
 HRESULT  IOleInPlaceActiveObject_TranslateAccelerator_Proxy(
    IOleInPlaceActiveObject * This,
     LPMSG lpmsg);
 HRESULT  IOleInPlaceActiveObject_TranslateAccelerator_Stub(
    IOleInPlaceActiveObject * This);
 HRESULT  IOleInPlaceActiveObject_ResizeBorder_Proxy(
    IOleInPlaceActiveObject * This,
     LPCRECT prcBorder,
     IOleInPlaceUIWindow *pUIWindow,
     BOOL fFrameWindow);
 HRESULT  IOleInPlaceActiveObject_ResizeBorder_Stub(
    IOleInPlaceActiveObject * This,
      LPCRECT prcBorder,
      const IID * const riid,
      IOleInPlaceUIWindow *pUIWindow,
     BOOL fFrameWindow);
 HRESULT  IViewObject_Draw_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     void *pvAspect,
     DVTARGETDEVICE *ptd,
     HDC hdcTargetDev,
     HDC hdcDraw,
     LPCRECTL lprcBounds,
     LPCRECTL lprcWBounds,
     BOOL (  *pfnContinue )(
        ULONG_PTR dwContinue),
     ULONG_PTR dwContinue);
 HRESULT  IViewObject_Draw_Stub(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DVTARGETDEVICE *ptd,
      HDC hdcTargetDev,
      HDC hdcDraw,
      LPCRECTL lprcBounds,
      LPCRECTL lprcWBounds,
      IContinue *pContinue);
 HRESULT  IViewObject_GetColorSet_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     void *pvAspect,
     DVTARGETDEVICE *ptd,
     HDC hicTargetDev,
     LOGPALETTE **ppColorSet);
 HRESULT  IViewObject_GetColorSet_Stub(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DVTARGETDEVICE *ptd,
     ULONG_PTR hicTargetDev,
      LOGPALETTE **ppColorSet);
 HRESULT  IViewObject_Freeze_Proxy(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     void *pvAspect,
     DWORD *pdwFreeze);
 HRESULT  IViewObject_Freeze_Stub(
    IViewObject * This,
     DWORD dwDrawAspect,
     LONG lindex,
     ULONG_PTR pvAspect,
      DWORD *pdwFreeze);
 HRESULT  IViewObject_GetAdvise_Proxy(
    IViewObject * This,
     DWORD *pAspects,
     DWORD *pAdvf,
     IAdviseSink **ppAdvSink);
 HRESULT  IViewObject_GetAdvise_Stub(
    IViewObject * This,
      DWORD *pAspects,
      DWORD *pAdvf,
      IAdviseSink **ppAdvSink);
 HRESULT  IEnumOLEVERB_Next_Proxy(
    IEnumOLEVERB * This,
     ULONG celt,
     LPOLEVERB rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumOLEVERB_Next_Stub(
    IEnumOLEVERB * This,
     ULONG celt,
      LPOLEVERB rgelt,
      ULONG *pceltFetched);
typedef struct IServiceProvider IServiceProvider;
extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_0000_v0_0_s_ifspec;
typedef    IServiceProvider *LPSERVICEPROVIDER;
extern const IID IID_IServiceProvider;
    typedef struct IServiceProviderVtbl
    {
        HRESULT (  *QueryInterface )(
            IServiceProvider * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IServiceProvider * This);
        ULONG (  *Release )(
            IServiceProvider * This);
         HRESULT (  *QueryService )(
            IServiceProvider * This,
             const GUID * const guidService,
             const IID * const riid,
             void **ppvObject);
    } IServiceProviderVtbl;
    struct IServiceProvider
    {
         struct IServiceProviderVtbl *lpVtbl;
    };
 HRESULT  IServiceProvider_RemoteQueryService_Proxy(
    IServiceProvider * This,
      const GUID * const guidService,
      const IID * const riid,
      IUnknown **ppvObject);
void  IServiceProvider_RemoteQueryService_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_0001_v0_0_s_ifspec;
 HRESULT  IServiceProvider_QueryService_Proxy(
    IServiceProvider * This,
     const GUID * const guidService,
     const IID * const riid,
     void **ppvObject);
 HRESULT  IServiceProvider_QueryService_Stub(
    IServiceProvider * This,
      const GUID * const guidService,
      const IID * const riid,
      IUnknown **ppvObject);
typedef struct IXMLDOMImplementation IXMLDOMImplementation;
typedef struct IXMLDOMNode IXMLDOMNode;
typedef struct IXMLDOMDocumentFragment IXMLDOMDocumentFragment;
typedef struct IXMLDOMDocument IXMLDOMDocument;
typedef struct IXMLDOMNodeList IXMLDOMNodeList;
typedef struct IXMLDOMNamedNodeMap IXMLDOMNamedNodeMap;
typedef struct IXMLDOMCharacterData IXMLDOMCharacterData;
typedef struct IXMLDOMAttribute IXMLDOMAttribute;
typedef struct IXMLDOMElement IXMLDOMElement;
typedef struct IXMLDOMText IXMLDOMText;
typedef struct IXMLDOMComment IXMLDOMComment;
typedef struct IXMLDOMProcessingInstruction IXMLDOMProcessingInstruction;
typedef struct IXMLDOMCDATASection IXMLDOMCDATASection;
typedef struct IXMLDOMDocumentType IXMLDOMDocumentType;
typedef struct IXMLDOMNotation IXMLDOMNotation;
typedef struct IXMLDOMEntity IXMLDOMEntity;
typedef struct IXMLDOMEntityReference IXMLDOMEntityReference;
typedef struct IXMLDOMParseError IXMLDOMParseError;
typedef struct IXTLRuntime IXTLRuntime;
typedef struct XMLDOMDocumentEvents XMLDOMDocumentEvents;
typedef struct DOMDocument DOMDocument;
typedef struct DOMFreeThreadedDocument DOMFreeThreadedDocument;
typedef struct IXMLHttpRequest IXMLHttpRequest;
typedef struct XMLHTTPRequest XMLHTTPRequest;
typedef struct IXMLDSOControl IXMLDSOControl;
typedef struct XMLDSOControl XMLDSOControl;
typedef struct IXMLElementCollection IXMLElementCollection;
typedef struct IXMLDocument IXMLDocument;
typedef struct IXMLDocument2 IXMLDocument2;
typedef struct IXMLElement IXMLElement;
typedef struct IXMLElement2 IXMLElement2;
typedef struct IXMLAttribute IXMLAttribute;
typedef struct IXMLError IXMLError;
typedef struct XMLDocument XMLDocument;
typedef struct ICreateTypeInfo ICreateTypeInfo;
typedef struct ICreateTypeInfo2 ICreateTypeInfo2;
typedef struct ICreateTypeLib ICreateTypeLib;
typedef struct ICreateTypeLib2 ICreateTypeLib2;
typedef struct IDispatch IDispatch;
typedef struct IEnumVARIANT IEnumVARIANT;
typedef struct ITypeComp ITypeComp;
typedef struct ITypeInfo ITypeInfo;
typedef struct ITypeInfo2 ITypeInfo2;
typedef struct ITypeLib ITypeLib;
typedef struct ITypeLib2 ITypeLib2;
typedef struct ITypeChangeEvents ITypeChangeEvents;
typedef struct IErrorInfo IErrorInfo;
typedef struct ICreateErrorInfo ICreateErrorInfo;
typedef struct ISupportErrorInfo ISupportErrorInfo;
typedef struct ITypeFactory ITypeFactory;
typedef struct ITypeMarshal ITypeMarshal;
typedef struct IRecordInfo IRecordInfo;
typedef struct IErrorLog IErrorLog;
typedef struct IPropertyBag IPropertyBag;
extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_0000_v0_0_s_ifspec;
typedef CY CURRENCY;
typedef struct tagSAFEARRAYBOUND
    {
    ULONG cElements;
    LONG lLbound;
    } 	SAFEARRAYBOUND;
typedef struct tagSAFEARRAYBOUND *LPSAFEARRAYBOUND;
typedef    struct _wireVARIANT *wireVARIANT;
typedef    struct _wireBRECORD *wireBRECORD;
typedef struct _wireSAFEARR_BSTR
    {
    ULONG Size;
    wireBSTR *aBstr;
    } 	SAFEARR_BSTR;
typedef struct _wireSAFEARR_UNKNOWN
    {
    ULONG Size;
    IUnknown **apUnknown;
    } 	SAFEARR_UNKNOWN;
typedef struct _wireSAFEARR_DISPATCH
    {
    ULONG Size;
    IDispatch **apDispatch;
    } 	SAFEARR_DISPATCH;
typedef struct _wireSAFEARR_VARIANT
    {
    ULONG Size;
    wireVARIANT *aVariant;
    } 	SAFEARR_VARIANT;
typedef struct _wireSAFEARR_BRECORD
    {
    ULONG Size;
    wireBRECORD *aRecord;
    } 	SAFEARR_BRECORD;
typedef struct _wireSAFEARR_HAVEIID
    {
    ULONG Size;
    IUnknown **apUnknown;
    IID iid;
    } 	SAFEARR_HAVEIID;
typedef
enum tagSF_TYPE
    {	SF_ERROR	= VT_ERROR,
	SF_I1	= VT_I1,
	SF_I2	= VT_I2,
	SF_I4	= VT_I4,
	SF_I8	= VT_I8,
	SF_BSTR	= VT_BSTR,
	SF_UNKNOWN	= VT_UNKNOWN,
	SF_DISPATCH	= VT_DISPATCH,
	SF_VARIANT	= VT_VARIANT,
	SF_RECORD	= VT_RECORD,
	SF_HAVEIID	= ( VT_UNKNOWN | VT_RESERVED )
    } 	SF_TYPE;
typedef struct _wireSAFEARRAY_UNION
    {
    ULONG sfType;
     union __MIDL_IOleAutomationTypes_0001
        {
        SAFEARR_BSTR BstrStr;
        SAFEARR_UNKNOWN UnknownStr;
        SAFEARR_DISPATCH DispatchStr;
        SAFEARR_VARIANT VariantStr;
        SAFEARR_BRECORD RecordStr;
        SAFEARR_HAVEIID HaveIidStr;
        BYTE_SIZEDARR ByteStr;
        WORD_SIZEDARR WordStr;
        DWORD_SIZEDARR LongStr;
        HYPER_SIZEDARR HyperStr;
        } 	u;
    } 	SAFEARRAYUNION;
typedef    struct _wireSAFEARRAY
    {
    USHORT cDims;
    USHORT fFeatures;
    ULONG cbElements;
    ULONG cLocks;
    SAFEARRAYUNION uArrayStructs;
    SAFEARRAYBOUND rgsabound[ 1 ];
    } 	*wireSAFEARRAY;
typedef    wireSAFEARRAY *wirePSAFEARRAY;
typedef struct tagSAFEARRAY
    {
    USHORT cDims;
    USHORT fFeatures;
    ULONG cbElements;
    ULONG cLocks;
    PVOID pvData;
    SAFEARRAYBOUND rgsabound[ 1 ];
    } 	SAFEARRAY;
typedef  SAFEARRAY *LPSAFEARRAY;
typedef  struct tagVARIANT VARIANT;
struct tagVARIANT
    {
    union
        {
        struct
            {
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union
                {
                LONGLONG llVal;
                LONG lVal;
                BYTE bVal;
                SHORT iVal;
                FLOAT fltVal;
                DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                SCODE scode;
                CY cyVal;
                DATE date;
                BSTR bstrVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                LONGLONG *pllVal;
                FLOAT *pfltVal;
                DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                SCODE *pscode;
                CY *pcyVal;
                DATE *pdate;
                BSTR *pbstrVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                VARIANT *pvarVal;
                PVOID byref;
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                ULONGLONG ullVal;
                INT intVal;
                UINT uintVal;
                DECIMAL *pdecVal;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                ULONGLONG *pullVal;
                INT *pintVal;
                UINT *puintVal;
                struct
                    {
                    PVOID pvRecord;
                    IRecordInfo *pRecInfo;
                    } 	;
                } 	;
            } 	;
        DECIMAL decVal;
        } 	;
    } ;
typedef VARIANT *LPVARIANT;
typedef VARIANT VARIANTARG;
typedef VARIANT *LPVARIANTARG;
struct _wireBRECORD
    {
    ULONG fFlags;
    ULONG clSize;
    IRecordInfo *pRecInfo;
    byte *pRecord;
    } ;
struct _wireVARIANT
    {
    DWORD clSize;
    DWORD rpcReserved;
    USHORT vt;
    USHORT wReserved1;
    USHORT wReserved2;
    USHORT wReserved3;
    union
        {
        LONGLONG llVal;
        LONG lVal;
        BYTE bVal;
        SHORT iVal;
        FLOAT fltVal;
        DOUBLE dblVal;
        VARIANT_BOOL boolVal;
        SCODE scode;
        CY cyVal;
        DATE date;
        wireBSTR bstrVal;
        IUnknown *punkVal;
        IDispatch *pdispVal;
        wirePSAFEARRAY parray;
        wireBRECORD brecVal;
        BYTE *pbVal;
        SHORT *piVal;
        LONG *plVal;
        LONGLONG *pllVal;
        FLOAT *pfltVal;
        DOUBLE *pdblVal;
        VARIANT_BOOL *pboolVal;
        SCODE *pscode;
        CY *pcyVal;
        DATE *pdate;
        wireBSTR *pbstrVal;
        IUnknown **ppunkVal;
        IDispatch **ppdispVal;
        wirePSAFEARRAY *pparray;
        wireVARIANT *pvarVal;
        CHAR cVal;
        USHORT uiVal;
        ULONG ulVal;
        ULONGLONG ullVal;
        INT intVal;
        UINT uintVal;
        DECIMAL decVal;
        DECIMAL *pdecVal;
        CHAR *pcVal;
        USHORT *puiVal;
        ULONG *pulVal;
        ULONGLONG *pullVal;
        INT *pintVal;
        UINT *puintVal;
        } 	;
    } ;
typedef LONG DISPID;
typedef DISPID MEMBERID;
typedef DWORD HREFTYPE;
typedef
enum tagTYPEKIND
    {	TKIND_ENUM	= 0,
	TKIND_RECORD	= ( TKIND_ENUM + 1 ) ,
	TKIND_MODULE	= ( TKIND_RECORD + 1 ) ,
	TKIND_INTERFACE	= ( TKIND_MODULE + 1 ) ,
	TKIND_DISPATCH	= ( TKIND_INTERFACE + 1 ) ,
	TKIND_COCLASS	= ( TKIND_DISPATCH + 1 ) ,
	TKIND_ALIAS	= ( TKIND_COCLASS + 1 ) ,
	TKIND_UNION	= ( TKIND_ALIAS + 1 ) ,
	TKIND_MAX	= ( TKIND_UNION + 1 )
    } 	TYPEKIND;
typedef struct tagTYPEDESC
    {
    union
        {
        struct tagTYPEDESC *lptdesc;
        struct tagARRAYDESC *lpadesc;
        HREFTYPE hreftype;
        } 	;
    VARTYPE vt;
    } 	TYPEDESC;
typedef struct tagARRAYDESC
    {
    TYPEDESC tdescElem;
    USHORT cDims;
    SAFEARRAYBOUND rgbounds[ 1 ];
    } 	ARRAYDESC;
typedef struct tagPARAMDESCEX
    {
    ULONG cBytes;
    VARIANTARG varDefaultValue;
    } 	PARAMDESCEX;
typedef struct tagPARAMDESCEX *LPPARAMDESCEX;
typedef struct tagPARAMDESC
    {
    LPPARAMDESCEX pparamdescex;
    USHORT wParamFlags;
    } 	PARAMDESC;
typedef struct tagPARAMDESC *LPPARAMDESC;
typedef struct tagIDLDESC
    {
    ULONG_PTR dwReserved;
    USHORT wIDLFlags;
    } 	IDLDESC;
typedef struct tagIDLDESC *LPIDLDESC;
typedef struct tagELEMDESC {
    TYPEDESC tdesc;
    union {
        IDLDESC idldesc;
        PARAMDESC paramdesc;
    };
} ELEMDESC, * LPELEMDESC;
typedef struct tagTYPEATTR
    {
    GUID guid;
    LCID lcid;
    DWORD dwReserved;
    MEMBERID memidConstructor;
    MEMBERID memidDestructor;
    LPOLESTR lpstrSchema;
    ULONG cbSizeInstance;
    TYPEKIND typekind;
    WORD cFuncs;
    WORD cVars;
    WORD cImplTypes;
    WORD cbSizeVft;
    WORD cbAlignment;
    WORD wTypeFlags;
    WORD wMajorVerNum;
    WORD wMinorVerNum;
    TYPEDESC tdescAlias;
    IDLDESC idldescType;
    } 	TYPEATTR;
typedef struct tagTYPEATTR *LPTYPEATTR;
typedef struct tagDISPPARAMS
    {
    VARIANTARG *rgvarg;
    DISPID *rgdispidNamedArgs;
    UINT cArgs;
    UINT cNamedArgs;
    } 	DISPPARAMS;
typedef struct tagEXCEPINFO {
    WORD  wCode;
    WORD  wReserved;
    BSTR  bstrSource;
    BSTR  bstrDescription;
    BSTR  bstrHelpFile;
    DWORD dwHelpContext;
    PVOID pvReserved;
    HRESULT ( *pfnDeferredFillIn)(struct tagEXCEPINFO *);
    SCODE scode;
} EXCEPINFO, * LPEXCEPINFO;
typedef
enum tagCALLCONV
    {	CC_FASTCALL	= 0,
	CC_CDECL	= 1,
	CC_MSCPASCAL	= ( CC_CDECL + 1 ) ,
	CC_PASCAL	= CC_MSCPASCAL,
	CC_MACPASCAL	= ( CC_PASCAL + 1 ) ,
	CC_STDCALL	= ( CC_MACPASCAL + 1 ) ,
	CC_FPFASTCALL	= ( CC_STDCALL + 1 ) ,
	CC_SYSCALL	= ( CC_FPFASTCALL + 1 ) ,
	CC_MPWCDECL	= ( CC_SYSCALL + 1 ) ,
	CC_MPWPASCAL	= ( CC_MPWCDECL + 1 ) ,
	CC_MAX	= ( CC_MPWPASCAL + 1 )
    } 	CALLCONV;
typedef
enum tagFUNCKIND
    {	FUNC_VIRTUAL	= 0,
	FUNC_PUREVIRTUAL	= ( FUNC_VIRTUAL + 1 ) ,
	FUNC_NONVIRTUAL	= ( FUNC_PUREVIRTUAL + 1 ) ,
	FUNC_STATIC	= ( FUNC_NONVIRTUAL + 1 ) ,
	FUNC_DISPATCH	= ( FUNC_STATIC + 1 )
    } 	FUNCKIND;
typedef
enum tagINVOKEKIND
    {	INVOKE_FUNC	= 1,
	INVOKE_PROPERTYGET	= 2,
	INVOKE_PROPERTYPUT	= 4,
	INVOKE_PROPERTYPUTREF	= 8
    } 	INVOKEKIND;
typedef struct tagFUNCDESC
    {
    MEMBERID memid;
    SCODE *lprgscode;
    ELEMDESC *lprgelemdescParam;
    FUNCKIND funckind;
    INVOKEKIND invkind;
    CALLCONV callconv;
    SHORT cParams;
    SHORT cParamsOpt;
    SHORT oVft;
    SHORT cScodes;
    ELEMDESC elemdescFunc;
    WORD wFuncFlags;
    } 	FUNCDESC;
typedef struct tagFUNCDESC *LPFUNCDESC;
typedef
enum tagVARKIND
    {	VAR_PERINSTANCE	= 0,
	VAR_STATIC	= ( VAR_PERINSTANCE + 1 ) ,
	VAR_CONST	= ( VAR_STATIC + 1 ) ,
	VAR_DISPATCH	= ( VAR_CONST + 1 )
    } 	VARKIND;
typedef struct tagVARDESC
    {
    MEMBERID memid;
    LPOLESTR lpstrSchema;
    union
        {
        ULONG oInst;
        VARIANT *lpvarValue;
        } 	;
    ELEMDESC elemdescVar;
    WORD wVarFlags;
    VARKIND varkind;
    } 	VARDESC;
typedef struct tagVARDESC *LPVARDESC;
typedef
enum tagTYPEFLAGS
    {	TYPEFLAG_FAPPOBJECT	= 0x1,
	TYPEFLAG_FCANCREATE	= 0x2,
	TYPEFLAG_FLICENSED	= 0x4,
	TYPEFLAG_FPREDECLID	= 0x8,
	TYPEFLAG_FHIDDEN	= 0x10,
	TYPEFLAG_FCONTROL	= 0x20,
	TYPEFLAG_FDUAL	= 0x40,
	TYPEFLAG_FNONEXTENSIBLE	= 0x80,
	TYPEFLAG_FOLEAUTOMATION	= 0x100,
	TYPEFLAG_FRESTRICTED	= 0x200,
	TYPEFLAG_FAGGREGATABLE	= 0x400,
	TYPEFLAG_FREPLACEABLE	= 0x800,
	TYPEFLAG_FDISPATCHABLE	= 0x1000,
	TYPEFLAG_FREVERSEBIND	= 0x2000,
	TYPEFLAG_FPROXY	= 0x4000
    } 	TYPEFLAGS;
typedef
enum tagFUNCFLAGS
    {	FUNCFLAG_FRESTRICTED	= 0x1,
	FUNCFLAG_FSOURCE	= 0x2,
	FUNCFLAG_FBINDABLE	= 0x4,
	FUNCFLAG_FREQUESTEDIT	= 0x8,
	FUNCFLAG_FDISPLAYBIND	= 0x10,
	FUNCFLAG_FDEFAULTBIND	= 0x20,
	FUNCFLAG_FHIDDEN	= 0x40,
	FUNCFLAG_FUSESGETLASTERROR	= 0x80,
	FUNCFLAG_FDEFAULTCOLLELEM	= 0x100,
	FUNCFLAG_FUIDEFAULT	= 0x200,
	FUNCFLAG_FNONBROWSABLE	= 0x400,
	FUNCFLAG_FREPLACEABLE	= 0x800,
	FUNCFLAG_FIMMEDIATEBIND	= 0x1000
    } 	FUNCFLAGS;
typedef
enum tagVARFLAGS
    {	VARFLAG_FREADONLY	= 0x1,
	VARFLAG_FSOURCE	= 0x2,
	VARFLAG_FBINDABLE	= 0x4,
	VARFLAG_FREQUESTEDIT	= 0x8,
	VARFLAG_FDISPLAYBIND	= 0x10,
	VARFLAG_FDEFAULTBIND	= 0x20,
	VARFLAG_FHIDDEN	= 0x40,
	VARFLAG_FRESTRICTED	= 0x80,
	VARFLAG_FDEFAULTCOLLELEM	= 0x100,
	VARFLAG_FUIDEFAULT	= 0x200,
	VARFLAG_FNONBROWSABLE	= 0x400,
	VARFLAG_FREPLACEABLE	= 0x800,
	VARFLAG_FIMMEDIATEBIND	= 0x1000
    } 	VARFLAGS;
typedef  struct tagCLEANLOCALSTORAGE
    {
    IUnknown *pInterface;
    PVOID pStorage;
    DWORD flags;
    } 	CLEANLOCALSTORAGE;
typedef struct tagCUSTDATAITEM
    {
    GUID guid;
    VARIANTARG varValue;
    } 	CUSTDATAITEM;
typedef struct tagCUSTDATAITEM *LPCUSTDATAITEM;
typedef struct tagCUSTDATA
    {
    DWORD cCustData;
    LPCUSTDATAITEM prgCustData;
    } 	CUSTDATA;
typedef struct tagCUSTDATA *LPCUSTDATA;
extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_c_ifspec;
extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_s_ifspec;
typedef  ICreateTypeInfo *LPCREATETYPEINFO;
extern const IID IID_ICreateTypeInfo;
    typedef struct ICreateTypeInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            ICreateTypeInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICreateTypeInfo * This);
        ULONG (  *Release )(
            ICreateTypeInfo * This);
        HRESULT (  *SetGuid )(
            ICreateTypeInfo * This,
             const GUID * const guid);
        HRESULT (  *SetTypeFlags )(
            ICreateTypeInfo * This,
             UINT uTypeFlags);
        HRESULT (  *SetDocString )(
            ICreateTypeInfo * This,
             LPOLESTR pStrDoc);
        HRESULT (  *SetHelpContext )(
            ICreateTypeInfo * This,
             DWORD dwHelpContext);
        HRESULT (  *SetVersion )(
            ICreateTypeInfo * This,
             WORD wMajorVerNum,
             WORD wMinorVerNum);
        HRESULT (  *AddRefTypeInfo )(
            ICreateTypeInfo * This,
             ITypeInfo *pTInfo,
             HREFTYPE *phRefType);
        HRESULT (  *AddFuncDesc )(
            ICreateTypeInfo * This,
             UINT index,
             FUNCDESC *pFuncDesc);
        HRESULT (  *AddImplType )(
            ICreateTypeInfo * This,
             UINT index,
             HREFTYPE hRefType);
        HRESULT (  *SetImplTypeFlags )(
            ICreateTypeInfo * This,
             UINT index,
             INT implTypeFlags);
        HRESULT (  *SetAlignment )(
            ICreateTypeInfo * This,
             WORD cbAlignment);
        HRESULT (  *SetSchema )(
            ICreateTypeInfo * This,
             LPOLESTR pStrSchema);
        HRESULT (  *AddVarDesc )(
            ICreateTypeInfo * This,
             UINT index,
             VARDESC *pVarDesc);
        HRESULT (  *SetFuncAndParamNames )(
            ICreateTypeInfo * This,
             UINT index,
             LPOLESTR *rgszNames,
             UINT cNames);
        HRESULT (  *SetVarName )(
            ICreateTypeInfo * This,
             UINT index,
             LPOLESTR szName);
        HRESULT (  *SetTypeDescAlias )(
            ICreateTypeInfo * This,
             TYPEDESC *pTDescAlias);
        HRESULT (  *DefineFuncAsDllEntry )(
            ICreateTypeInfo * This,
             UINT index,
             LPOLESTR szDllName,
             LPOLESTR szProcName);
        HRESULT (  *SetFuncDocString )(
            ICreateTypeInfo * This,
             UINT index,
             LPOLESTR szDocString);
        HRESULT (  *SetVarDocString )(
            ICreateTypeInfo * This,
             UINT index,
             LPOLESTR szDocString);
        HRESULT (  *SetFuncHelpContext )(
            ICreateTypeInfo * This,
             UINT index,
             DWORD dwHelpContext);
        HRESULT (  *SetVarHelpContext )(
            ICreateTypeInfo * This,
             UINT index,
             DWORD dwHelpContext);
        HRESULT (  *SetMops )(
            ICreateTypeInfo * This,
             UINT index,
             BSTR bstrMops);
        HRESULT (  *SetTypeIdldesc )(
            ICreateTypeInfo * This,
             IDLDESC *pIdlDesc);
        HRESULT (  *LayOut )(
            ICreateTypeInfo * This);
    } ICreateTypeInfoVtbl;
    struct ICreateTypeInfo
    {
         struct ICreateTypeInfoVtbl *lpVtbl;
    };
typedef  ICreateTypeInfo2 *LPCREATETYPEINFO2;
extern const IID IID_ICreateTypeInfo2;
    typedef struct ICreateTypeInfo2Vtbl
    {
        HRESULT (  *QueryInterface )(
            ICreateTypeInfo2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICreateTypeInfo2 * This);
        ULONG (  *Release )(
            ICreateTypeInfo2 * This);
        HRESULT (  *SetGuid )(
            ICreateTypeInfo2 * This,
             const GUID * const guid);
        HRESULT (  *SetTypeFlags )(
            ICreateTypeInfo2 * This,
             UINT uTypeFlags);
        HRESULT (  *SetDocString )(
            ICreateTypeInfo2 * This,
             LPOLESTR pStrDoc);
        HRESULT (  *SetHelpContext )(
            ICreateTypeInfo2 * This,
             DWORD dwHelpContext);
        HRESULT (  *SetVersion )(
            ICreateTypeInfo2 * This,
             WORD wMajorVerNum,
             WORD wMinorVerNum);
        HRESULT (  *AddRefTypeInfo )(
            ICreateTypeInfo2 * This,
             ITypeInfo *pTInfo,
             HREFTYPE *phRefType);
        HRESULT (  *AddFuncDesc )(
            ICreateTypeInfo2 * This,
             UINT index,
             FUNCDESC *pFuncDesc);
        HRESULT (  *AddImplType )(
            ICreateTypeInfo2 * This,
             UINT index,
             HREFTYPE hRefType);
        HRESULT (  *SetImplTypeFlags )(
            ICreateTypeInfo2 * This,
             UINT index,
             INT implTypeFlags);
        HRESULT (  *SetAlignment )(
            ICreateTypeInfo2 * This,
             WORD cbAlignment);
        HRESULT (  *SetSchema )(
            ICreateTypeInfo2 * This,
             LPOLESTR pStrSchema);
        HRESULT (  *AddVarDesc )(
            ICreateTypeInfo2 * This,
             UINT index,
             VARDESC *pVarDesc);
        HRESULT (  *SetFuncAndParamNames )(
            ICreateTypeInfo2 * This,
             UINT index,
             LPOLESTR *rgszNames,
             UINT cNames);
        HRESULT (  *SetVarName )(
            ICreateTypeInfo2 * This,
             UINT index,
             LPOLESTR szName);
        HRESULT (  *SetTypeDescAlias )(
            ICreateTypeInfo2 * This,
             TYPEDESC *pTDescAlias);
        HRESULT (  *DefineFuncAsDllEntry )(
            ICreateTypeInfo2 * This,
             UINT index,
             LPOLESTR szDllName,
             LPOLESTR szProcName);
        HRESULT (  *SetFuncDocString )(
            ICreateTypeInfo2 * This,
             UINT index,
             LPOLESTR szDocString);
        HRESULT (  *SetVarDocString )(
            ICreateTypeInfo2 * This,
             UINT index,
             LPOLESTR szDocString);
        HRESULT (  *SetFuncHelpContext )(
            ICreateTypeInfo2 * This,
             UINT index,
             DWORD dwHelpContext);
        HRESULT (  *SetVarHelpContext )(
            ICreateTypeInfo2 * This,
             UINT index,
             DWORD dwHelpContext);
        HRESULT (  *SetMops )(
            ICreateTypeInfo2 * This,
             UINT index,
             BSTR bstrMops);
        HRESULT (  *SetTypeIdldesc )(
            ICreateTypeInfo2 * This,
             IDLDESC *pIdlDesc);
        HRESULT (  *LayOut )(
            ICreateTypeInfo2 * This);
        HRESULT (  *DeleteFuncDesc )(
            ICreateTypeInfo2 * This,
             UINT index);
        HRESULT (  *DeleteFuncDescByMemId )(
            ICreateTypeInfo2 * This,
             MEMBERID memid,
             INVOKEKIND invKind);
        HRESULT (  *DeleteVarDesc )(
            ICreateTypeInfo2 * This,
             UINT index);
        HRESULT (  *DeleteVarDescByMemId )(
            ICreateTypeInfo2 * This,
             MEMBERID memid);
        HRESULT (  *DeleteImplType )(
            ICreateTypeInfo2 * This,
             UINT index);
        HRESULT (  *SetCustData )(
            ICreateTypeInfo2 * This,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetFuncCustData )(
            ICreateTypeInfo2 * This,
             UINT index,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetParamCustData )(
            ICreateTypeInfo2 * This,
             UINT indexFunc,
             UINT indexParam,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetVarCustData )(
            ICreateTypeInfo2 * This,
             UINT index,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetImplTypeCustData )(
            ICreateTypeInfo2 * This,
             UINT index,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetHelpStringContext )(
            ICreateTypeInfo2 * This,
             ULONG dwHelpStringContext);
        HRESULT (  *SetFuncHelpStringContext )(
            ICreateTypeInfo2 * This,
             UINT index,
             ULONG dwHelpStringContext);
        HRESULT (  *SetVarHelpStringContext )(
            ICreateTypeInfo2 * This,
             UINT index,
             ULONG dwHelpStringContext);
        HRESULT (  *Invalidate )(
            ICreateTypeInfo2 * This);
        HRESULT (  *SetName )(
            ICreateTypeInfo2 * This,
             LPOLESTR szName);
    } ICreateTypeInfo2Vtbl;
    struct ICreateTypeInfo2
    {
         struct ICreateTypeInfo2Vtbl *lpVtbl;
    };
typedef  ICreateTypeLib *LPCREATETYPELIB;
extern const IID IID_ICreateTypeLib;
    typedef struct ICreateTypeLibVtbl
    {
        HRESULT (  *QueryInterface )(
            ICreateTypeLib * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICreateTypeLib * This);
        ULONG (  *Release )(
            ICreateTypeLib * This);
        HRESULT (  *CreateTypeInfo )(
            ICreateTypeLib * This,
             LPOLESTR szName,
             TYPEKIND tkind,
             ICreateTypeInfo **ppCTInfo);
        HRESULT (  *SetName )(
            ICreateTypeLib * This,
             LPOLESTR szName);
        HRESULT (  *SetVersion )(
            ICreateTypeLib * This,
             WORD wMajorVerNum,
             WORD wMinorVerNum);
        HRESULT (  *SetGuid )(
            ICreateTypeLib * This,
             const GUID * const guid);
        HRESULT (  *SetDocString )(
            ICreateTypeLib * This,
             LPOLESTR szDoc);
        HRESULT (  *SetHelpFileName )(
            ICreateTypeLib * This,
             LPOLESTR szHelpFileName);
        HRESULT (  *SetHelpContext )(
            ICreateTypeLib * This,
             DWORD dwHelpContext);
        HRESULT (  *SetLcid )(
            ICreateTypeLib * This,
             LCID lcid);
        HRESULT (  *SetLibFlags )(
            ICreateTypeLib * This,
             UINT uLibFlags);
        HRESULT (  *SaveAllChanges )(
            ICreateTypeLib * This);
    } ICreateTypeLibVtbl;
    struct ICreateTypeLib
    {
         struct ICreateTypeLibVtbl *lpVtbl;
    };
typedef  ICreateTypeLib2 *LPCREATETYPELIB2;
extern const IID IID_ICreateTypeLib2;
    typedef struct ICreateTypeLib2Vtbl
    {
        HRESULT (  *QueryInterface )(
            ICreateTypeLib2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICreateTypeLib2 * This);
        ULONG (  *Release )(
            ICreateTypeLib2 * This);
        HRESULT (  *CreateTypeInfo )(
            ICreateTypeLib2 * This,
             LPOLESTR szName,
             TYPEKIND tkind,
             ICreateTypeInfo **ppCTInfo);
        HRESULT (  *SetName )(
            ICreateTypeLib2 * This,
             LPOLESTR szName);
        HRESULT (  *SetVersion )(
            ICreateTypeLib2 * This,
             WORD wMajorVerNum,
             WORD wMinorVerNum);
        HRESULT (  *SetGuid )(
            ICreateTypeLib2 * This,
             const GUID * const guid);
        HRESULT (  *SetDocString )(
            ICreateTypeLib2 * This,
             LPOLESTR szDoc);
        HRESULT (  *SetHelpFileName )(
            ICreateTypeLib2 * This,
             LPOLESTR szHelpFileName);
        HRESULT (  *SetHelpContext )(
            ICreateTypeLib2 * This,
             DWORD dwHelpContext);
        HRESULT (  *SetLcid )(
            ICreateTypeLib2 * This,
             LCID lcid);
        HRESULT (  *SetLibFlags )(
            ICreateTypeLib2 * This,
             UINT uLibFlags);
        HRESULT (  *SaveAllChanges )(
            ICreateTypeLib2 * This);
        HRESULT (  *DeleteTypeInfo )(
            ICreateTypeLib2 * This,
             LPOLESTR szName);
        HRESULT (  *SetCustData )(
            ICreateTypeLib2 * This,
             const GUID * const guid,
             VARIANT *pVarVal);
        HRESULT (  *SetHelpStringContext )(
            ICreateTypeLib2 * This,
             ULONG dwHelpStringContext);
        HRESULT (  *SetHelpStringDll )(
            ICreateTypeLib2 * This,
             LPOLESTR szFileName);
    } ICreateTypeLib2Vtbl;
    struct ICreateTypeLib2
    {
         struct ICreateTypeLib2Vtbl *lpVtbl;
    };
typedef    IDispatch *LPDISPATCH;
extern const IID IID_IDispatch;
    typedef struct IDispatchVtbl
    {
        HRESULT (  *QueryInterface )(
            IDispatch * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDispatch * This);
        ULONG (  *Release )(
            IDispatch * This);
        HRESULT (  *GetTypeInfoCount )(
            IDispatch * This,
              UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IDispatch * This,
             UINT iTInfo,
             LCID lcid,
              ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IDispatch * This,
              const IID * const riid,
              LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
              DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IDispatch * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
    } IDispatchVtbl;
    struct IDispatch
    {
         struct IDispatchVtbl *lpVtbl;
    };
 HRESULT  IDispatch_RemoteInvoke_Proxy(
    IDispatch * This,
     DISPID dispIdMember,
      const IID * const riid,
     LCID lcid,
     DWORD dwFlags,
      DISPPARAMS *pDispParams,
      VARIANT *pVarResult,
      EXCEPINFO *pExcepInfo,
      UINT *pArgErr,
     UINT cVarRef,
      UINT *rgVarRefIdx,
      VARIANTARG *rgVarRef);
void  IDispatch_RemoteInvoke_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumVARIANT *LPENUMVARIANT;
extern const IID IID_IEnumVARIANT;
    typedef struct IEnumVARIANTVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumVARIANT * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumVARIANT * This);
        ULONG (  *Release )(
            IEnumVARIANT * This);
         HRESULT (  *Next )(
            IEnumVARIANT * This,
             ULONG celt,
             VARIANT *rgVar,
             ULONG *pCeltFetched);
        HRESULT (  *Skip )(
            IEnumVARIANT * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumVARIANT * This);
        HRESULT (  *Clone )(
            IEnumVARIANT * This,
              IEnumVARIANT **ppEnum);
    } IEnumVARIANTVtbl;
    struct IEnumVARIANT
    {
         struct IEnumVARIANTVtbl *lpVtbl;
    };
 HRESULT  IEnumVARIANT_RemoteNext_Proxy(
    IEnumVARIANT * This,
     ULONG celt,
      VARIANT *rgVar,
      ULONG *pCeltFetched);
void  IEnumVARIANT_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    ITypeComp *LPTYPECOMP;
typedef
enum tagDESCKIND
    {	DESCKIND_NONE	= 0,
	DESCKIND_FUNCDESC	= ( DESCKIND_NONE + 1 ) ,
	DESCKIND_VARDESC	= ( DESCKIND_FUNCDESC + 1 ) ,
	DESCKIND_TYPECOMP	= ( DESCKIND_VARDESC + 1 ) ,
	DESCKIND_IMPLICITAPPOBJ	= ( DESCKIND_TYPECOMP + 1 ) ,
	DESCKIND_MAX	= ( DESCKIND_IMPLICITAPPOBJ + 1 )
    } 	DESCKIND;
typedef union tagBINDPTR
    {
    FUNCDESC *lpfuncdesc;
    VARDESC *lpvardesc;
    ITypeComp *lptcomp;
    } 	BINDPTR;
typedef union tagBINDPTR *LPBINDPTR;
extern const IID IID_ITypeComp;
    typedef struct ITypeCompVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeComp * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeComp * This);
        ULONG (  *Release )(
            ITypeComp * This);
         HRESULT (  *Bind )(
            ITypeComp * This,
             LPOLESTR szName,
             ULONG lHashVal,
             WORD wFlags,
             ITypeInfo **ppTInfo,
             DESCKIND *pDescKind,
             BINDPTR *pBindPtr);
         HRESULT (  *BindType )(
            ITypeComp * This,
             LPOLESTR szName,
             ULONG lHashVal,
             ITypeInfo **ppTInfo,
             ITypeComp **ppTComp);
    } ITypeCompVtbl;
    struct ITypeComp
    {
         struct ITypeCompVtbl *lpVtbl;
    };
 HRESULT  ITypeComp_RemoteBind_Proxy(
    ITypeComp * This,
      LPOLESTR szName,
     ULONG lHashVal,
     WORD wFlags,
      ITypeInfo **ppTInfo,
      DESCKIND *pDescKind,
      LPFUNCDESC *ppFuncDesc,
      LPVARDESC *ppVarDesc,
      ITypeComp **ppTypeComp,
      CLEANLOCALSTORAGE *pDummy);
void  ITypeComp_RemoteBind_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeComp_RemoteBindType_Proxy(
    ITypeComp * This,
      LPOLESTR szName,
     ULONG lHashVal,
      ITypeInfo **ppTInfo);
void  ITypeComp_RemoteBindType_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    ITypeInfo *LPTYPEINFO;
extern const IID IID_ITypeInfo;
    typedef struct ITypeInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeInfo * This);
        ULONG (  *Release )(
            ITypeInfo * This);
         HRESULT (  *GetTypeAttr )(
            ITypeInfo * This,
             TYPEATTR **ppTypeAttr);
        HRESULT (  *GetTypeComp )(
            ITypeInfo * This,
              ITypeComp **ppTComp);
         HRESULT (  *GetFuncDesc )(
            ITypeInfo * This,
             UINT index,
             FUNCDESC **ppFuncDesc);
         HRESULT (  *GetVarDesc )(
            ITypeInfo * This,
             UINT index,
             VARDESC **ppVarDesc);
         HRESULT (  *GetNames )(
            ITypeInfo * This,
             MEMBERID memid,
             BSTR *rgBstrNames,
             UINT cMaxNames,
             UINT *pcNames);
        HRESULT (  *GetRefTypeOfImplType )(
            ITypeInfo * This,
             UINT index,
              HREFTYPE *pRefType);
        HRESULT (  *GetImplTypeFlags )(
            ITypeInfo * This,
             UINT index,
              INT *pImplTypeFlags);
         HRESULT (  *GetIDsOfNames )(
            ITypeInfo * This,
             LPOLESTR *rgszNames,
             UINT cNames,
             MEMBERID *pMemId);
         HRESULT (  *Invoke )(
            ITypeInfo * This,
             PVOID pvInstance,
             MEMBERID memid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *GetDocumentation )(
            ITypeInfo * This,
             MEMBERID memid,
             BSTR *pBstrName,
             BSTR *pBstrDocString,
             DWORD *pdwHelpContext,
             BSTR *pBstrHelpFile);
         HRESULT (  *GetDllEntry )(
            ITypeInfo * This,
             MEMBERID memid,
             INVOKEKIND invKind,
             BSTR *pBstrDllName,
             BSTR *pBstrName,
             WORD *pwOrdinal);
        HRESULT (  *GetRefTypeInfo )(
            ITypeInfo * This,
             HREFTYPE hRefType,
              ITypeInfo **ppTInfo);
         HRESULT (  *AddressOfMember )(
            ITypeInfo * This,
             MEMBERID memid,
             INVOKEKIND invKind,
             PVOID *ppv);
         HRESULT (  *CreateInstance )(
            ITypeInfo * This,
             IUnknown *pUnkOuter,
             const IID * const riid,
             PVOID *ppvObj);
        HRESULT (  *GetMops )(
            ITypeInfo * This,
             MEMBERID memid,
              BSTR *pBstrMops);
         HRESULT (  *GetContainingTypeLib )(
            ITypeInfo * This,
             ITypeLib **ppTLib,
             UINT *pIndex);
         void (  *ReleaseTypeAttr )(
            ITypeInfo * This,
             TYPEATTR *pTypeAttr);
         void (  *ReleaseFuncDesc )(
            ITypeInfo * This,
             FUNCDESC *pFuncDesc);
         void (  *ReleaseVarDesc )(
            ITypeInfo * This,
             VARDESC *pVarDesc);
    } ITypeInfoVtbl;
    struct ITypeInfo
    {
         struct ITypeInfoVtbl *lpVtbl;
    };
 HRESULT  ITypeInfo_RemoteGetTypeAttr_Proxy(
    ITypeInfo * This,
      LPTYPEATTR *ppTypeAttr,
      CLEANLOCALSTORAGE *pDummy);
void  ITypeInfo_RemoteGetTypeAttr_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetFuncDesc_Proxy(
    ITypeInfo * This,
     UINT index,
      LPFUNCDESC *ppFuncDesc,
      CLEANLOCALSTORAGE *pDummy);
void  ITypeInfo_RemoteGetFuncDesc_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetVarDesc_Proxy(
    ITypeInfo * This,
     UINT index,
      LPVARDESC *ppVarDesc,
      CLEANLOCALSTORAGE *pDummy);
void  ITypeInfo_RemoteGetVarDesc_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetNames_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
      BSTR *rgBstrNames,
     UINT cMaxNames,
      UINT *pcNames);
void  ITypeInfo_RemoteGetNames_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalGetIDsOfNames_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalGetIDsOfNames_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalInvoke_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalInvoke_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetDocumentation_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     DWORD refPtrFlags,
      BSTR *pBstrName,
      BSTR *pBstrDocString,
      DWORD *pdwHelpContext,
      BSTR *pBstrHelpFile);
void  ITypeInfo_RemoteGetDocumentation_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetDllEntry_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     INVOKEKIND invKind,
     DWORD refPtrFlags,
      BSTR *pBstrDllName,
      BSTR *pBstrName,
      WORD *pwOrdinal);
void  ITypeInfo_RemoteGetDllEntry_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalAddressOfMember_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalAddressOfMember_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteCreateInstance_Proxy(
    ITypeInfo * This,
      const IID * const riid,
      IUnknown **ppvObj);
void  ITypeInfo_RemoteCreateInstance_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_RemoteGetContainingTypeLib_Proxy(
    ITypeInfo * This,
      ITypeLib **ppTLib,
      UINT *pIndex);
void  ITypeInfo_RemoteGetContainingTypeLib_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalReleaseTypeAttr_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalReleaseTypeAttr_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalReleaseFuncDesc_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalReleaseFuncDesc_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeInfo_LocalReleaseVarDesc_Proxy(
    ITypeInfo * This);
void  ITypeInfo_LocalReleaseVarDesc_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    ITypeInfo2 *LPTYPEINFO2;
extern const IID IID_ITypeInfo2;
    typedef struct ITypeInfo2Vtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeInfo2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeInfo2 * This);
        ULONG (  *Release )(
            ITypeInfo2 * This);
         HRESULT (  *GetTypeAttr )(
            ITypeInfo2 * This,
             TYPEATTR **ppTypeAttr);
        HRESULT (  *GetTypeComp )(
            ITypeInfo2 * This,
              ITypeComp **ppTComp);
         HRESULT (  *GetFuncDesc )(
            ITypeInfo2 * This,
             UINT index,
             FUNCDESC **ppFuncDesc);
         HRESULT (  *GetVarDesc )(
            ITypeInfo2 * This,
             UINT index,
             VARDESC **ppVarDesc);
         HRESULT (  *GetNames )(
            ITypeInfo2 * This,
             MEMBERID memid,
             BSTR *rgBstrNames,
             UINT cMaxNames,
             UINT *pcNames);
        HRESULT (  *GetRefTypeOfImplType )(
            ITypeInfo2 * This,
             UINT index,
              HREFTYPE *pRefType);
        HRESULT (  *GetImplTypeFlags )(
            ITypeInfo2 * This,
             UINT index,
              INT *pImplTypeFlags);
         HRESULT (  *GetIDsOfNames )(
            ITypeInfo2 * This,
             LPOLESTR *rgszNames,
             UINT cNames,
             MEMBERID *pMemId);
         HRESULT (  *Invoke )(
            ITypeInfo2 * This,
             PVOID pvInstance,
             MEMBERID memid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *GetDocumentation )(
            ITypeInfo2 * This,
             MEMBERID memid,
             BSTR *pBstrName,
             BSTR *pBstrDocString,
             DWORD *pdwHelpContext,
             BSTR *pBstrHelpFile);
         HRESULT (  *GetDllEntry )(
            ITypeInfo2 * This,
             MEMBERID memid,
             INVOKEKIND invKind,
             BSTR *pBstrDllName,
             BSTR *pBstrName,
             WORD *pwOrdinal);
        HRESULT (  *GetRefTypeInfo )(
            ITypeInfo2 * This,
             HREFTYPE hRefType,
              ITypeInfo **ppTInfo);
         HRESULT (  *AddressOfMember )(
            ITypeInfo2 * This,
             MEMBERID memid,
             INVOKEKIND invKind,
             PVOID *ppv);
         HRESULT (  *CreateInstance )(
            ITypeInfo2 * This,
             IUnknown *pUnkOuter,
             const IID * const riid,
             PVOID *ppvObj);
        HRESULT (  *GetMops )(
            ITypeInfo2 * This,
             MEMBERID memid,
              BSTR *pBstrMops);
         HRESULT (  *GetContainingTypeLib )(
            ITypeInfo2 * This,
             ITypeLib **ppTLib,
             UINT *pIndex);
         void (  *ReleaseTypeAttr )(
            ITypeInfo2 * This,
             TYPEATTR *pTypeAttr);
         void (  *ReleaseFuncDesc )(
            ITypeInfo2 * This,
             FUNCDESC *pFuncDesc);
         void (  *ReleaseVarDesc )(
            ITypeInfo2 * This,
             VARDESC *pVarDesc);
        HRESULT (  *GetTypeKind )(
            ITypeInfo2 * This,
              TYPEKIND *pTypeKind);
        HRESULT (  *GetTypeFlags )(
            ITypeInfo2 * This,
              ULONG *pTypeFlags);
        HRESULT (  *GetFuncIndexOfMemId )(
            ITypeInfo2 * This,
             MEMBERID memid,
             INVOKEKIND invKind,
              UINT *pFuncIndex);
        HRESULT (  *GetVarIndexOfMemId )(
            ITypeInfo2 * This,
             MEMBERID memid,
              UINT *pVarIndex);
        HRESULT (  *GetCustData )(
            ITypeInfo2 * This,
              const GUID * const guid,
              VARIANT *pVarVal);
        HRESULT (  *GetFuncCustData )(
            ITypeInfo2 * This,
             UINT index,
              const GUID * const guid,
              VARIANT *pVarVal);
        HRESULT (  *GetParamCustData )(
            ITypeInfo2 * This,
             UINT indexFunc,
             UINT indexParam,
              const GUID * const guid,
              VARIANT *pVarVal);
        HRESULT (  *GetVarCustData )(
            ITypeInfo2 * This,
             UINT index,
              const GUID * const guid,
              VARIANT *pVarVal);
        HRESULT (  *GetImplTypeCustData )(
            ITypeInfo2 * This,
             UINT index,
              const GUID * const guid,
              VARIANT *pVarVal);
         HRESULT (  *GetDocumentation2 )(
            ITypeInfo2 * This,
             MEMBERID memid,
             LCID lcid,
             BSTR *pbstrHelpString,
             DWORD *pdwHelpStringContext,
             BSTR *pbstrHelpStringDll);
        HRESULT (  *GetAllCustData )(
            ITypeInfo2 * This,
              CUSTDATA *pCustData);
        HRESULT (  *GetAllFuncCustData )(
            ITypeInfo2 * This,
             UINT index,
              CUSTDATA *pCustData);
        HRESULT (  *GetAllParamCustData )(
            ITypeInfo2 * This,
             UINT indexFunc,
             UINT indexParam,
              CUSTDATA *pCustData);
        HRESULT (  *GetAllVarCustData )(
            ITypeInfo2 * This,
             UINT index,
              CUSTDATA *pCustData);
        HRESULT (  *GetAllImplTypeCustData )(
            ITypeInfo2 * This,
             UINT index,
              CUSTDATA *pCustData);
    } ITypeInfo2Vtbl;
    struct ITypeInfo2
    {
         struct ITypeInfo2Vtbl *lpVtbl;
    };
 HRESULT  ITypeInfo2_RemoteGetDocumentation2_Proxy(
    ITypeInfo2 * This,
     MEMBERID memid,
     LCID lcid,
     DWORD refPtrFlags,
      BSTR *pbstrHelpString,
      DWORD *pdwHelpStringContext,
      BSTR *pbstrHelpStringDll);
void  ITypeInfo2_RemoteGetDocumentation2_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef
enum tagSYSKIND
    {	SYS_WIN16	= 0,
	SYS_WIN32	= ( SYS_WIN16 + 1 ) ,
	SYS_MAC	= ( SYS_WIN32 + 1 ) ,
	SYS_WIN64	= ( SYS_MAC + 1 )
    } 	SYSKIND;
typedef
enum tagLIBFLAGS
    {	LIBFLAG_FRESTRICTED	= 0x1,
	LIBFLAG_FCONTROL	= 0x2,
	LIBFLAG_FHIDDEN	= 0x4,
	LIBFLAG_FHASDISKIMAGE	= 0x8
    } 	LIBFLAGS;
typedef    ITypeLib *LPTYPELIB;
typedef struct tagTLIBATTR
    {
    GUID guid;
    LCID lcid;
    SYSKIND syskind;
    WORD wMajorVerNum;
    WORD wMinorVerNum;
    WORD wLibFlags;
    } 	TLIBATTR;
typedef struct tagTLIBATTR *LPTLIBATTR;
extern const IID IID_ITypeLib;
    typedef struct ITypeLibVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeLib * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeLib * This);
        ULONG (  *Release )(
            ITypeLib * This);
         UINT (  *GetTypeInfoCount )(
            ITypeLib * This);
        HRESULT (  *GetTypeInfo )(
            ITypeLib * This,
             UINT index,
              ITypeInfo **ppTInfo);
        HRESULT (  *GetTypeInfoType )(
            ITypeLib * This,
             UINT index,
              TYPEKIND *pTKind);
        HRESULT (  *GetTypeInfoOfGuid )(
            ITypeLib * This,
              const GUID * const guid,
              ITypeInfo **ppTinfo);
         HRESULT (  *GetLibAttr )(
            ITypeLib * This,
             TLIBATTR **ppTLibAttr);
        HRESULT (  *GetTypeComp )(
            ITypeLib * This,
              ITypeComp **ppTComp);
         HRESULT (  *GetDocumentation )(
            ITypeLib * This,
             INT index,
             BSTR *pBstrName,
             BSTR *pBstrDocString,
             DWORD *pdwHelpContext,
             BSTR *pBstrHelpFile);
         HRESULT (  *IsName )(
            ITypeLib * This,
             LPOLESTR szNameBuf,
             ULONG lHashVal,
             BOOL *pfName);
         HRESULT (  *FindName )(
            ITypeLib * This,
             LPOLESTR szNameBuf,
             ULONG lHashVal,
             ITypeInfo **ppTInfo,
             MEMBERID *rgMemId,
             USHORT *pcFound);
         void (  *ReleaseTLibAttr )(
            ITypeLib * This,
             TLIBATTR *pTLibAttr);
    } ITypeLibVtbl;
    struct ITypeLib
    {
         struct ITypeLibVtbl *lpVtbl;
    };
 HRESULT  ITypeLib_RemoteGetTypeInfoCount_Proxy(
    ITypeLib * This,
      UINT *pcTInfo);
void  ITypeLib_RemoteGetTypeInfoCount_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib_RemoteGetLibAttr_Proxy(
    ITypeLib * This,
      LPTLIBATTR *ppTLibAttr,
      CLEANLOCALSTORAGE *pDummy);
void  ITypeLib_RemoteGetLibAttr_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib_RemoteGetDocumentation_Proxy(
    ITypeLib * This,
     INT index,
     DWORD refPtrFlags,
      BSTR *pBstrName,
      BSTR *pBstrDocString,
      DWORD *pdwHelpContext,
      BSTR *pBstrHelpFile);
void  ITypeLib_RemoteGetDocumentation_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib_RemoteIsName_Proxy(
    ITypeLib * This,
      LPOLESTR szNameBuf,
     ULONG lHashVal,
      BOOL *pfName,
      BSTR *pBstrLibName);
void  ITypeLib_RemoteIsName_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib_RemoteFindName_Proxy(
    ITypeLib * This,
      LPOLESTR szNameBuf,
     ULONG lHashVal,
      ITypeInfo **ppTInfo,
      MEMBERID *rgMemId,
      USHORT *pcFound,
      BSTR *pBstrLibName);
void  ITypeLib_RemoteFindName_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib_LocalReleaseTLibAttr_Proxy(
    ITypeLib * This);
void  ITypeLib_LocalReleaseTLibAttr_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    ITypeLib2 *LPTYPELIB2;
extern const IID IID_ITypeLib2;
    typedef struct ITypeLib2Vtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeLib2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeLib2 * This);
        ULONG (  *Release )(
            ITypeLib2 * This);
         UINT (  *GetTypeInfoCount )(
            ITypeLib2 * This);
        HRESULT (  *GetTypeInfo )(
            ITypeLib2 * This,
             UINT index,
              ITypeInfo **ppTInfo);
        HRESULT (  *GetTypeInfoType )(
            ITypeLib2 * This,
             UINT index,
              TYPEKIND *pTKind);
        HRESULT (  *GetTypeInfoOfGuid )(
            ITypeLib2 * This,
              const GUID * const guid,
              ITypeInfo **ppTinfo);
         HRESULT (  *GetLibAttr )(
            ITypeLib2 * This,
             TLIBATTR **ppTLibAttr);
        HRESULT (  *GetTypeComp )(
            ITypeLib2 * This,
              ITypeComp **ppTComp);
         HRESULT (  *GetDocumentation )(
            ITypeLib2 * This,
             INT index,
             BSTR *pBstrName,
             BSTR *pBstrDocString,
             DWORD *pdwHelpContext,
             BSTR *pBstrHelpFile);
         HRESULT (  *IsName )(
            ITypeLib2 * This,
             LPOLESTR szNameBuf,
             ULONG lHashVal,
             BOOL *pfName);
         HRESULT (  *FindName )(
            ITypeLib2 * This,
             LPOLESTR szNameBuf,
             ULONG lHashVal,
             ITypeInfo **ppTInfo,
             MEMBERID *rgMemId,
             USHORT *pcFound);
         void (  *ReleaseTLibAttr )(
            ITypeLib2 * This,
             TLIBATTR *pTLibAttr);
        HRESULT (  *GetCustData )(
            ITypeLib2 * This,
              const GUID * const guid,
              VARIANT *pVarVal);
         HRESULT (  *GetLibStatistics )(
            ITypeLib2 * This,
             ULONG *pcUniqueNames,
             ULONG *pcchUniqueNames);
         HRESULT (  *GetDocumentation2 )(
            ITypeLib2 * This,
             INT index,
             LCID lcid,
             BSTR *pbstrHelpString,
             DWORD *pdwHelpStringContext,
             BSTR *pbstrHelpStringDll);
        HRESULT (  *GetAllCustData )(
            ITypeLib2 * This,
              CUSTDATA *pCustData);
    } ITypeLib2Vtbl;
    struct ITypeLib2
    {
         struct ITypeLib2Vtbl *lpVtbl;
    };
 HRESULT  ITypeLib2_RemoteGetLibStatistics_Proxy(
    ITypeLib2 * This,
      ULONG *pcUniqueNames,
      ULONG *pcchUniqueNames);
void  ITypeLib2_RemoteGetLibStatistics_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  ITypeLib2_RemoteGetDocumentation2_Proxy(
    ITypeLib2 * This,
     INT index,
     LCID lcid,
     DWORD refPtrFlags,
      BSTR *pbstrHelpString,
      DWORD *pdwHelpStringContext,
      BSTR *pbstrHelpStringDll);
void  ITypeLib2_RemoteGetDocumentation2_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef  ITypeChangeEvents *LPTYPECHANGEEVENTS;
typedef
enum tagCHANGEKIND
    {	CHANGEKIND_ADDMEMBER	= 0,
	CHANGEKIND_DELETEMEMBER	= ( CHANGEKIND_ADDMEMBER + 1 ) ,
	CHANGEKIND_SETNAMES	= ( CHANGEKIND_DELETEMEMBER + 1 ) ,
	CHANGEKIND_SETDOCUMENTATION	= ( CHANGEKIND_SETNAMES + 1 ) ,
	CHANGEKIND_GENERAL	= ( CHANGEKIND_SETDOCUMENTATION + 1 ) ,
	CHANGEKIND_INVALIDATE	= ( CHANGEKIND_GENERAL + 1 ) ,
	CHANGEKIND_CHANGEFAILED	= ( CHANGEKIND_INVALIDATE + 1 ) ,
	CHANGEKIND_MAX	= ( CHANGEKIND_CHANGEFAILED + 1 )
    } 	CHANGEKIND;
extern const IID IID_ITypeChangeEvents;
    typedef struct ITypeChangeEventsVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeChangeEvents * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeChangeEvents * This);
        ULONG (  *Release )(
            ITypeChangeEvents * This);
        HRESULT (  *RequestTypeChange )(
            ITypeChangeEvents * This,
             CHANGEKIND changeKind,
             ITypeInfo *pTInfoBefore,
             LPOLESTR pStrName,
             INT *pfCancel);
        HRESULT (  *AfterTypeChange )(
            ITypeChangeEvents * This,
             CHANGEKIND changeKind,
             ITypeInfo *pTInfoAfter,
             LPOLESTR pStrName);
    } ITypeChangeEventsVtbl;
    struct ITypeChangeEvents
    {
         struct ITypeChangeEventsVtbl *lpVtbl;
    };
typedef    IErrorInfo *LPERRORINFO;
extern const IID IID_IErrorInfo;
    typedef struct IErrorInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IErrorInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IErrorInfo * This);
        ULONG (  *Release )(
            IErrorInfo * This);
        HRESULT (  *GetGUID )(
            IErrorInfo * This,
              GUID *pGUID);
        HRESULT (  *GetSource )(
            IErrorInfo * This,
              BSTR *pBstrSource);
        HRESULT (  *GetDescription )(
            IErrorInfo * This,
              BSTR *pBstrDescription);
        HRESULT (  *GetHelpFile )(
            IErrorInfo * This,
              BSTR *pBstrHelpFile);
        HRESULT (  *GetHelpContext )(
            IErrorInfo * This,
              DWORD *pdwHelpContext);
    } IErrorInfoVtbl;
    struct IErrorInfo
    {
         struct IErrorInfoVtbl *lpVtbl;
    };
typedef    ICreateErrorInfo *LPCREATEERRORINFO;
extern const IID IID_ICreateErrorInfo;
    typedef struct ICreateErrorInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            ICreateErrorInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICreateErrorInfo * This);
        ULONG (  *Release )(
            ICreateErrorInfo * This);
        HRESULT (  *SetGUID )(
            ICreateErrorInfo * This,
              const GUID * const rguid);
        HRESULT (  *SetSource )(
            ICreateErrorInfo * This,
              LPOLESTR szSource);
        HRESULT (  *SetDescription )(
            ICreateErrorInfo * This,
              LPOLESTR szDescription);
        HRESULT (  *SetHelpFile )(
            ICreateErrorInfo * This,
              LPOLESTR szHelpFile);
        HRESULT (  *SetHelpContext )(
            ICreateErrorInfo * This,
             DWORD dwHelpContext);
    } ICreateErrorInfoVtbl;
    struct ICreateErrorInfo
    {
         struct ICreateErrorInfoVtbl *lpVtbl;
    };
typedef    ISupportErrorInfo *LPSUPPORTERRORINFO;
extern const IID IID_ISupportErrorInfo;
    typedef struct ISupportErrorInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            ISupportErrorInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISupportErrorInfo * This);
        ULONG (  *Release )(
            ISupportErrorInfo * This);
        HRESULT (  *InterfaceSupportsErrorInfo )(
            ISupportErrorInfo * This,
              const IID * const riid);
    } ISupportErrorInfoVtbl;
    struct ISupportErrorInfo
    {
         struct ISupportErrorInfoVtbl *lpVtbl;
    };
extern const IID IID_ITypeFactory;
    typedef struct ITypeFactoryVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeFactory * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeFactory * This);
        ULONG (  *Release )(
            ITypeFactory * This);
        HRESULT (  *CreateFromTypeInfo )(
            ITypeFactory * This,
              ITypeInfo *pTypeInfo,
              const IID * const riid,
              IUnknown **ppv);
    } ITypeFactoryVtbl;
    struct ITypeFactory
    {
         struct ITypeFactoryVtbl *lpVtbl;
    };
extern const IID IID_ITypeMarshal;
    typedef struct ITypeMarshalVtbl
    {
        HRESULT (  *QueryInterface )(
            ITypeMarshal * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ITypeMarshal * This);
        ULONG (  *Release )(
            ITypeMarshal * This);
        HRESULT (  *Size )(
            ITypeMarshal * This,
             PVOID pvType,
             DWORD dwDestContext,
             PVOID pvDestContext,
             ULONG *pSize);
        HRESULT (  *Marshal )(
            ITypeMarshal * This,
             PVOID pvType,
             DWORD dwDestContext,
             PVOID pvDestContext,
             ULONG cbBufferLength,
             BYTE *pBuffer,
             ULONG *pcbWritten);
        HRESULT (  *Unmarshal )(
            ITypeMarshal * This,
             PVOID pvType,
             DWORD dwFlags,
             ULONG cbBufferLength,
             BYTE *pBuffer,
             ULONG *pcbRead);
        HRESULT (  *Free )(
            ITypeMarshal * This,
             PVOID pvType);
    } ITypeMarshalVtbl;
    struct ITypeMarshal
    {
         struct ITypeMarshalVtbl *lpVtbl;
    };
typedef  IRecordInfo *LPRECORDINFO;
extern const IID IID_IRecordInfo;
    typedef struct IRecordInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IRecordInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IRecordInfo * This);
        ULONG (  *Release )(
            IRecordInfo * This);
        HRESULT (  *RecordInit )(
            IRecordInfo * This,
             PVOID pvNew);
        HRESULT (  *RecordClear )(
            IRecordInfo * This,
             PVOID pvExisting);
        HRESULT (  *RecordCopy )(
            IRecordInfo * This,
             PVOID pvExisting,
             PVOID pvNew);
        HRESULT (  *GetGuid )(
            IRecordInfo * This,
             GUID *pguid);
        HRESULT (  *GetName )(
            IRecordInfo * This,
             BSTR *pbstrName);
        HRESULT (  *GetSize )(
            IRecordInfo * This,
             ULONG *pcbSize);
        HRESULT (  *GetTypeInfo )(
            IRecordInfo * This,
             ITypeInfo **ppTypeInfo);
        HRESULT (  *GetField )(
            IRecordInfo * This,
             PVOID pvData,
             LPCOLESTR szFieldName,
             VARIANT *pvarField);
        HRESULT (  *GetFieldNoCopy )(
            IRecordInfo * This,
             PVOID pvData,
             LPCOLESTR szFieldName,
             VARIANT *pvarField,
             PVOID *ppvDataCArray);
        HRESULT (  *PutField )(
            IRecordInfo * This,
             ULONG wFlags,
             PVOID pvData,
             LPCOLESTR szFieldName,
             VARIANT *pvarField);
        HRESULT (  *PutFieldNoCopy )(
            IRecordInfo * This,
             ULONG wFlags,
             PVOID pvData,
             LPCOLESTR szFieldName,
             VARIANT *pvarField);
        HRESULT (  *GetFieldNames )(
            IRecordInfo * This,
             ULONG *pcNames,
             BSTR *rgBstrNames);
        BOOL (  *IsMatchingType )(
            IRecordInfo * This,
             IRecordInfo *pRecordInfo);
        PVOID (  *RecordCreate )(
            IRecordInfo * This);
        HRESULT (  *RecordCreateCopy )(
            IRecordInfo * This,
             PVOID pvSource,
             PVOID *ppvDest);
        HRESULT (  *RecordDestroy )(
            IRecordInfo * This,
             PVOID pvRecord);
    } IRecordInfoVtbl;
    struct IRecordInfo
    {
         struct IRecordInfoVtbl *lpVtbl;
    };
typedef IErrorLog *LPERRORLOG;
extern const IID IID_IErrorLog;
    typedef struct IErrorLogVtbl
    {
        HRESULT (  *QueryInterface )(
            IErrorLog * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IErrorLog * This);
        ULONG (  *Release )(
            IErrorLog * This);
        HRESULT (  *AddError )(
            IErrorLog * This,
              LPCOLESTR pszPropName,
              EXCEPINFO *pExcepInfo);
    } IErrorLogVtbl;
    struct IErrorLog
    {
         struct IErrorLogVtbl *lpVtbl;
    };
typedef IPropertyBag *LPPROPERTYBAG;
extern const IID IID_IPropertyBag;
    typedef struct IPropertyBagVtbl
    {
        HRESULT (  *QueryInterface )(
            IPropertyBag * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPropertyBag * This);
        ULONG (  *Release )(
            IPropertyBag * This);
         HRESULT (  *Read )(
            IPropertyBag * This,
             LPCOLESTR pszPropName,
             VARIANT *pVar,
             IErrorLog *pErrorLog);
        HRESULT (  *Write )(
            IPropertyBag * This,
              LPCOLESTR pszPropName,
              VARIANT *pVar);
    } IPropertyBagVtbl;
    struct IPropertyBag
    {
         struct IPropertyBagVtbl *lpVtbl;
    };
 HRESULT  IPropertyBag_RemoteRead_Proxy(
    IPropertyBag * This,
      LPCOLESTR pszPropName,
      VARIANT *pVar,
      IErrorLog *pErrorLog,
     DWORD varType,
      IUnknown *pUnkObj);
void  IPropertyBag_RemoteRead_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_0021_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_0021_v0_0_s_ifspec;
unsigned long               BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree(     unsigned long *, BSTR * );
unsigned long               CLEANLOCALSTORAGE_UserSize(     unsigned long *, unsigned long            , CLEANLOCALSTORAGE * );
unsigned char *   CLEANLOCALSTORAGE_UserMarshal(  unsigned long *, unsigned char *, CLEANLOCALSTORAGE * );
unsigned char *   CLEANLOCALSTORAGE_UserUnmarshal(unsigned long *, unsigned char *, CLEANLOCALSTORAGE * );
void                        CLEANLOCALSTORAGE_UserFree(     unsigned long *, CLEANLOCALSTORAGE * );
unsigned long               VARIANT_UserSize(     unsigned long *, unsigned long            , VARIANT * );
unsigned char *   VARIANT_UserMarshal(  unsigned long *, unsigned char *, VARIANT * );
unsigned char *   VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
void                        VARIANT_UserFree(     unsigned long *, VARIANT * );
unsigned long               BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree64(     unsigned long *, BSTR * );
unsigned long               CLEANLOCALSTORAGE_UserSize64(     unsigned long *, unsigned long            , CLEANLOCALSTORAGE * );
unsigned char *   CLEANLOCALSTORAGE_UserMarshal64(  unsigned long *, unsigned char *, CLEANLOCALSTORAGE * );
unsigned char *   CLEANLOCALSTORAGE_UserUnmarshal64(unsigned long *, unsigned char *, CLEANLOCALSTORAGE * );
void                        CLEANLOCALSTORAGE_UserFree64(     unsigned long *, CLEANLOCALSTORAGE * );
unsigned long               VARIANT_UserSize64(     unsigned long *, unsigned long            , VARIANT * );
unsigned char *   VARIANT_UserMarshal64(  unsigned long *, unsigned char *, VARIANT * );
unsigned char *   VARIANT_UserUnmarshal64(unsigned long *, unsigned char *, VARIANT * );
void                        VARIANT_UserFree64(     unsigned long *, VARIANT * );
 HRESULT  IDispatch_Invoke_Proxy(
    IDispatch * This,
     DISPID dispIdMember,
     const IID * const riid,
     LCID lcid,
     WORD wFlags,
     DISPPARAMS *pDispParams,
     VARIANT *pVarResult,
     EXCEPINFO *pExcepInfo,
     UINT *puArgErr);
 HRESULT  IDispatch_Invoke_Stub(
    IDispatch * This,
     DISPID dispIdMember,
      const IID * const riid,
     LCID lcid,
     DWORD dwFlags,
      DISPPARAMS *pDispParams,
      VARIANT *pVarResult,
      EXCEPINFO *pExcepInfo,
      UINT *pArgErr,
     UINT cVarRef,
      UINT *rgVarRefIdx,
      VARIANTARG *rgVarRef);
 HRESULT  IEnumVARIANT_Next_Proxy(
    IEnumVARIANT * This,
     ULONG celt,
     VARIANT *rgVar,
     ULONG *pCeltFetched);
 HRESULT  IEnumVARIANT_Next_Stub(
    IEnumVARIANT * This,
     ULONG celt,
      VARIANT *rgVar,
      ULONG *pCeltFetched);
 HRESULT  ITypeComp_Bind_Proxy(
    ITypeComp * This,
     LPOLESTR szName,
     ULONG lHashVal,
     WORD wFlags,
     ITypeInfo **ppTInfo,
     DESCKIND *pDescKind,
     BINDPTR *pBindPtr);
 HRESULT  ITypeComp_Bind_Stub(
    ITypeComp * This,
      LPOLESTR szName,
     ULONG lHashVal,
     WORD wFlags,
      ITypeInfo **ppTInfo,
      DESCKIND *pDescKind,
      LPFUNCDESC *ppFuncDesc,
      LPVARDESC *ppVarDesc,
      ITypeComp **ppTypeComp,
      CLEANLOCALSTORAGE *pDummy);
 HRESULT  ITypeComp_BindType_Proxy(
    ITypeComp * This,
     LPOLESTR szName,
     ULONG lHashVal,
     ITypeInfo **ppTInfo,
     ITypeComp **ppTComp);
 HRESULT  ITypeComp_BindType_Stub(
    ITypeComp * This,
      LPOLESTR szName,
     ULONG lHashVal,
      ITypeInfo **ppTInfo);
 HRESULT  ITypeInfo_GetTypeAttr_Proxy(
    ITypeInfo * This,
     TYPEATTR **ppTypeAttr);
 HRESULT  ITypeInfo_GetTypeAttr_Stub(
    ITypeInfo * This,
      LPTYPEATTR *ppTypeAttr,
      CLEANLOCALSTORAGE *pDummy);
 HRESULT  ITypeInfo_GetFuncDesc_Proxy(
    ITypeInfo * This,
     UINT index,
     FUNCDESC **ppFuncDesc);
 HRESULT  ITypeInfo_GetFuncDesc_Stub(
    ITypeInfo * This,
     UINT index,
      LPFUNCDESC *ppFuncDesc,
      CLEANLOCALSTORAGE *pDummy);
 HRESULT  ITypeInfo_GetVarDesc_Proxy(
    ITypeInfo * This,
     UINT index,
     VARDESC **ppVarDesc);
 HRESULT  ITypeInfo_GetVarDesc_Stub(
    ITypeInfo * This,
     UINT index,
      LPVARDESC *ppVarDesc,
      CLEANLOCALSTORAGE *pDummy);
 HRESULT  ITypeInfo_GetNames_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     BSTR *rgBstrNames,
     UINT cMaxNames,
     UINT *pcNames);
 HRESULT  ITypeInfo_GetNames_Stub(
    ITypeInfo * This,
     MEMBERID memid,
      BSTR *rgBstrNames,
     UINT cMaxNames,
      UINT *pcNames);
 HRESULT  ITypeInfo_GetIDsOfNames_Proxy(
    ITypeInfo * This,
     LPOLESTR *rgszNames,
     UINT cNames,
     MEMBERID *pMemId);
 HRESULT  ITypeInfo_GetIDsOfNames_Stub(
    ITypeInfo * This);
 HRESULT  ITypeInfo_Invoke_Proxy(
    ITypeInfo * This,
     PVOID pvInstance,
     MEMBERID memid,
     WORD wFlags,
     DISPPARAMS *pDispParams,
     VARIANT *pVarResult,
     EXCEPINFO *pExcepInfo,
     UINT *puArgErr);
 HRESULT  ITypeInfo_Invoke_Stub(
    ITypeInfo * This);
 HRESULT  ITypeInfo_GetDocumentation_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     BSTR *pBstrName,
     BSTR *pBstrDocString,
     DWORD *pdwHelpContext,
     BSTR *pBstrHelpFile);
 HRESULT  ITypeInfo_GetDocumentation_Stub(
    ITypeInfo * This,
     MEMBERID memid,
     DWORD refPtrFlags,
      BSTR *pBstrName,
      BSTR *pBstrDocString,
      DWORD *pdwHelpContext,
      BSTR *pBstrHelpFile);
 HRESULT  ITypeInfo_GetDllEntry_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     INVOKEKIND invKind,
     BSTR *pBstrDllName,
     BSTR *pBstrName,
     WORD *pwOrdinal);
 HRESULT  ITypeInfo_GetDllEntry_Stub(
    ITypeInfo * This,
     MEMBERID memid,
     INVOKEKIND invKind,
     DWORD refPtrFlags,
      BSTR *pBstrDllName,
      BSTR *pBstrName,
      WORD *pwOrdinal);
 HRESULT  ITypeInfo_AddressOfMember_Proxy(
    ITypeInfo * This,
     MEMBERID memid,
     INVOKEKIND invKind,
     PVOID *ppv);
 HRESULT  ITypeInfo_AddressOfMember_Stub(
    ITypeInfo * This);
 HRESULT  ITypeInfo_CreateInstance_Proxy(
    ITypeInfo * This,
     IUnknown *pUnkOuter,
     const IID * const riid,
     PVOID *ppvObj);
 HRESULT  ITypeInfo_CreateInstance_Stub(
    ITypeInfo * This,
      const IID * const riid,
      IUnknown **ppvObj);
 HRESULT  ITypeInfo_GetContainingTypeLib_Proxy(
    ITypeInfo * This,
     ITypeLib **ppTLib,
     UINT *pIndex);
 HRESULT  ITypeInfo_GetContainingTypeLib_Stub(
    ITypeInfo * This,
      ITypeLib **ppTLib,
      UINT *pIndex);
 void  ITypeInfo_ReleaseTypeAttr_Proxy(
    ITypeInfo * This,
     TYPEATTR *pTypeAttr);
 HRESULT  ITypeInfo_ReleaseTypeAttr_Stub(
    ITypeInfo * This);
 void  ITypeInfo_ReleaseFuncDesc_Proxy(
    ITypeInfo * This,
     FUNCDESC *pFuncDesc);
 HRESULT  ITypeInfo_ReleaseFuncDesc_Stub(
    ITypeInfo * This);
 void  ITypeInfo_ReleaseVarDesc_Proxy(
    ITypeInfo * This,
     VARDESC *pVarDesc);
 HRESULT  ITypeInfo_ReleaseVarDesc_Stub(
    ITypeInfo * This);
 HRESULT  ITypeInfo2_GetDocumentation2_Proxy(
    ITypeInfo2 * This,
     MEMBERID memid,
     LCID lcid,
     BSTR *pbstrHelpString,
     DWORD *pdwHelpStringContext,
     BSTR *pbstrHelpStringDll);
 HRESULT  ITypeInfo2_GetDocumentation2_Stub(
    ITypeInfo2 * This,
     MEMBERID memid,
     LCID lcid,
     DWORD refPtrFlags,
      BSTR *pbstrHelpString,
      DWORD *pdwHelpStringContext,
      BSTR *pbstrHelpStringDll);
 UINT  ITypeLib_GetTypeInfoCount_Proxy(
    ITypeLib * This);
 HRESULT  ITypeLib_GetTypeInfoCount_Stub(
    ITypeLib * This,
      UINT *pcTInfo);
 HRESULT  ITypeLib_GetLibAttr_Proxy(
    ITypeLib * This,
     TLIBATTR **ppTLibAttr);
 HRESULT  ITypeLib_GetLibAttr_Stub(
    ITypeLib * This,
      LPTLIBATTR *ppTLibAttr,
      CLEANLOCALSTORAGE *pDummy);
 HRESULT  ITypeLib_GetDocumentation_Proxy(
    ITypeLib * This,
     INT index,
     BSTR *pBstrName,
     BSTR *pBstrDocString,
     DWORD *pdwHelpContext,
     BSTR *pBstrHelpFile);
 HRESULT  ITypeLib_GetDocumentation_Stub(
    ITypeLib * This,
     INT index,
     DWORD refPtrFlags,
      BSTR *pBstrName,
      BSTR *pBstrDocString,
      DWORD *pdwHelpContext,
      BSTR *pBstrHelpFile);
 HRESULT  ITypeLib_IsName_Proxy(
    ITypeLib * This,
     LPOLESTR szNameBuf,
     ULONG lHashVal,
     BOOL *pfName);
 HRESULT  ITypeLib_IsName_Stub(
    ITypeLib * This,
      LPOLESTR szNameBuf,
     ULONG lHashVal,
      BOOL *pfName,
      BSTR *pBstrLibName);
 HRESULT  ITypeLib_FindName_Proxy(
    ITypeLib * This,
     LPOLESTR szNameBuf,
     ULONG lHashVal,
     ITypeInfo **ppTInfo,
     MEMBERID *rgMemId,
     USHORT *pcFound);
 HRESULT  ITypeLib_FindName_Stub(
    ITypeLib * This,
      LPOLESTR szNameBuf,
     ULONG lHashVal,
      ITypeInfo **ppTInfo,
      MEMBERID *rgMemId,
      USHORT *pcFound,
      BSTR *pBstrLibName);
 void  ITypeLib_ReleaseTLibAttr_Proxy(
    ITypeLib * This,
     TLIBATTR *pTLibAttr);
 HRESULT  ITypeLib_ReleaseTLibAttr_Stub(
    ITypeLib * This);
 HRESULT  ITypeLib2_GetLibStatistics_Proxy(
    ITypeLib2 * This,
     ULONG *pcUniqueNames,
     ULONG *pcchUniqueNames);
 HRESULT  ITypeLib2_GetLibStatistics_Stub(
    ITypeLib2 * This,
      ULONG *pcUniqueNames,
      ULONG *pcchUniqueNames);
 HRESULT  ITypeLib2_GetDocumentation2_Proxy(
    ITypeLib2 * This,
     INT index,
     LCID lcid,
     BSTR *pbstrHelpString,
     DWORD *pdwHelpStringContext,
     BSTR *pbstrHelpStringDll);
 HRESULT  ITypeLib2_GetDocumentation2_Stub(
    ITypeLib2 * This,
     INT index,
     LCID lcid,
     DWORD refPtrFlags,
      BSTR *pbstrHelpString,
      DWORD *pdwHelpStringContext,
      BSTR *pbstrHelpStringDll);
 HRESULT  IPropertyBag_Read_Proxy(
    IPropertyBag * This,
     LPCOLESTR pszPropName,
     VARIANT *pVar,
     IErrorLog *pErrorLog);
 HRESULT  IPropertyBag_Read_Stub(
    IPropertyBag * This,
      LPCOLESTR pszPropName,
      VARIANT *pVar,
      IErrorLog *pErrorLog,
     DWORD varType,
      IUnknown *pUnkObj);
typedef struct _xml_error
    {
    unsigned int _nLine;
    BSTR _pchBuf;
    unsigned int _cchBuf;
    unsigned int _ich;
    BSTR _pszFound;
    BSTR _pszExpected;
    DWORD _reserved1;
    DWORD _reserved2;
    } 	XML_ERROR;
extern RPC_IF_HANDLE __MIDL_itf_msxml_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_msxml_0000_0000_v0_0_s_ifspec;
typedef
enum tagDOMNodeType
    {	NODE_INVALID	= 0,
	NODE_ELEMENT	= ( NODE_INVALID + 1 ) ,
	NODE_ATTRIBUTE	= ( NODE_ELEMENT + 1 ) ,
	NODE_TEXT	= ( NODE_ATTRIBUTE + 1 ) ,
	NODE_CDATA_SECTION	= ( NODE_TEXT + 1 ) ,
	NODE_ENTITY_REFERENCE	= ( NODE_CDATA_SECTION + 1 ) ,
	NODE_ENTITY	= ( NODE_ENTITY_REFERENCE + 1 ) ,
	NODE_PROCESSING_INSTRUCTION	= ( NODE_ENTITY + 1 ) ,
	NODE_COMMENT	= ( NODE_PROCESSING_INSTRUCTION + 1 ) ,
	NODE_DOCUMENT	= ( NODE_COMMENT + 1 ) ,
	NODE_DOCUMENT_TYPE	= ( NODE_DOCUMENT + 1 ) ,
	NODE_DOCUMENT_FRAGMENT	= ( NODE_DOCUMENT_TYPE + 1 ) ,
	NODE_NOTATION	= ( NODE_DOCUMENT_FRAGMENT + 1 )
    } 	DOMNodeType;
typedef
enum tagXMLEMEM_TYPE
    {	XMLELEMTYPE_ELEMENT	= 0,
	XMLELEMTYPE_TEXT	= ( XMLELEMTYPE_ELEMENT + 1 ) ,
	XMLELEMTYPE_COMMENT	= ( XMLELEMTYPE_TEXT + 1 ) ,
	XMLELEMTYPE_DOCUMENT	= ( XMLELEMTYPE_COMMENT + 1 ) ,
	XMLELEMTYPE_DTD	= ( XMLELEMTYPE_DOCUMENT + 1 ) ,
	XMLELEMTYPE_PI	= ( XMLELEMTYPE_DTD + 1 ) ,
	XMLELEMTYPE_OTHER	= ( XMLELEMTYPE_PI + 1 )
    } 	XMLELEM_TYPE;
extern const IID LIBID_MSXML;
extern const IID IID_IXMLDOMImplementation;
    typedef struct IXMLDOMImplementationVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMImplementation * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMImplementation * This);
        ULONG (  *Release )(
            IXMLDOMImplementation * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMImplementation * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMImplementation * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMImplementation * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMImplementation * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *hasFeature )(
            IXMLDOMImplementation * This,
             BSTR feature,
             BSTR version,
             VARIANT_BOOL *hasFeature);
    } IXMLDOMImplementationVtbl;
    struct IXMLDOMImplementation
    {
         struct IXMLDOMImplementationVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMNode;
    typedef struct IXMLDOMNodeVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMNode * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMNode * This);
        ULONG (  *Release )(
            IXMLDOMNode * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMNode * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMNode * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMNode * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMNode * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMNode * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMNode * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMNode * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMNode * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMNode * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMNode * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMNode * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMNode * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMNode * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMNode * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMNode * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMNode * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMNode * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMNode * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMNode * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMNode * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMNode * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMNode * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMNode * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMNode * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMNode * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMNode * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMNode * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMNode * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMNode * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMNode * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMNode * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMNode * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMNode * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMNode * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMNode * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMNode * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMNode * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMNode * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMNode * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMNode * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
    } IXMLDOMNodeVtbl;
    struct IXMLDOMNode
    {
         struct IXMLDOMNodeVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMDocumentFragment;
    typedef struct IXMLDOMDocumentFragmentVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMDocumentFragment * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMDocumentFragment * This);
        ULONG (  *Release )(
            IXMLDOMDocumentFragment * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMDocumentFragment * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMDocumentFragment * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMDocumentFragment * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMDocumentFragment * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMDocumentFragment * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMDocumentFragment * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMDocumentFragment * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMDocumentFragment * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMDocumentFragment * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMDocumentFragment * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMDocumentFragment * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMDocumentFragment * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMDocumentFragment * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMDocumentFragment * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMDocumentFragment * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMDocumentFragment * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMDocumentFragment * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMDocumentFragment * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMDocumentFragment * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMDocumentFragment * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMDocumentFragment * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMDocumentFragment * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMDocumentFragment * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMDocumentFragment * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMDocumentFragment * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMDocumentFragment * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
    } IXMLDOMDocumentFragmentVtbl;
    struct IXMLDOMDocumentFragment
    {
         struct IXMLDOMDocumentFragmentVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMDocument;
    typedef struct IXMLDOMDocumentVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMDocument * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMDocument * This);
        ULONG (  *Release )(
            IXMLDOMDocument * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMDocument * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMDocument * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMDocument * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMDocument * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMDocument * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMDocument * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMDocument * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMDocument * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMDocument * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMDocument * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMDocument * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMDocument * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMDocument * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMDocument * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMDocument * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMDocument * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMDocument * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMDocument * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMDocument * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMDocument * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMDocument * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMDocument * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMDocument * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMDocument * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMDocument * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMDocument * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMDocument * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMDocument * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMDocument * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMDocument * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMDocument * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMDocument * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMDocument * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMDocument * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMDocument * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMDocument * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMDocument * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_doctype )(
            IXMLDOMDocument * This,
             IXMLDOMDocumentType **documentType);
         HRESULT (  *get_implementation )(
            IXMLDOMDocument * This,
             IXMLDOMImplementation **impl);
         HRESULT (  *get_documentElement )(
            IXMLDOMDocument * This,
             IXMLDOMElement **DOMElement);
         HRESULT (  *putref_documentElement )(
            IXMLDOMDocument * This,
             IXMLDOMElement *DOMElement);
         HRESULT (  *createElement )(
            IXMLDOMDocument * This,
             BSTR tagName,
             IXMLDOMElement **element);
         HRESULT (  *createDocumentFragment )(
            IXMLDOMDocument * This,
             IXMLDOMDocumentFragment **docFrag);
         HRESULT (  *createTextNode )(
            IXMLDOMDocument * This,
             BSTR data,
             IXMLDOMText **text);
         HRESULT (  *createComment )(
            IXMLDOMDocument * This,
             BSTR data,
             IXMLDOMComment **comment);
         HRESULT (  *createCDATASection )(
            IXMLDOMDocument * This,
             BSTR data,
             IXMLDOMCDATASection **cdata);
         HRESULT (  *createProcessingInstruction )(
            IXMLDOMDocument * This,
             BSTR target,
             BSTR data,
             IXMLDOMProcessingInstruction **pi);
         HRESULT (  *createAttribute )(
            IXMLDOMDocument * This,
             BSTR name,
             IXMLDOMAttribute **attribute);
         HRESULT (  *createEntityReference )(
            IXMLDOMDocument * This,
             BSTR name,
             IXMLDOMEntityReference **entityRef);
         HRESULT (  *getElementsByTagName )(
            IXMLDOMDocument * This,
             BSTR tagName,
             IXMLDOMNodeList **resultList);
         HRESULT (  *createNode )(
            IXMLDOMDocument * This,
             VARIANT Type,
             BSTR name,
             BSTR namespaceURI,
             IXMLDOMNode **node);
         HRESULT (  *nodeFromID )(
            IXMLDOMDocument * This,
             BSTR idString,
             IXMLDOMNode **node);
         HRESULT (  *load )(
            IXMLDOMDocument * This,
             VARIANT xmlSource,
             VARIANT_BOOL *isSuccessful);
         HRESULT (  *get_readyState )(
            IXMLDOMDocument * This,
             long *value);
         HRESULT (  *get_parseError )(
            IXMLDOMDocument * This,
             IXMLDOMParseError **errorObj);
         HRESULT (  *get_url )(
            IXMLDOMDocument * This,
             BSTR *urlString);
         HRESULT (  *get_async )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isAsync);
         HRESULT (  *put_async )(
            IXMLDOMDocument * This,
             VARIANT_BOOL isAsync);
         HRESULT (  *abort )(
            IXMLDOMDocument * This);
         HRESULT (  *loadXML )(
            IXMLDOMDocument * This,
             BSTR bstrXML,
             VARIANT_BOOL *isSuccessful);
         HRESULT (  *save )(
            IXMLDOMDocument * This,
             VARIANT destination);
         HRESULT (  *get_validateOnParse )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isValidating);
         HRESULT (  *put_validateOnParse )(
            IXMLDOMDocument * This,
             VARIANT_BOOL isValidating);
         HRESULT (  *get_resolveExternals )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isResolving);
         HRESULT (  *put_resolveExternals )(
            IXMLDOMDocument * This,
             VARIANT_BOOL isResolving);
         HRESULT (  *get_preserveWhiteSpace )(
            IXMLDOMDocument * This,
             VARIANT_BOOL *isPreserving);
         HRESULT (  *put_preserveWhiteSpace )(
            IXMLDOMDocument * This,
             VARIANT_BOOL isPreserving);
         HRESULT (  *put_onreadystatechange )(
            IXMLDOMDocument * This,
             VARIANT readystatechangeSink);
         HRESULT (  *put_ondataavailable )(
            IXMLDOMDocument * This,
             VARIANT ondataavailableSink);
         HRESULT (  *put_ontransformnode )(
            IXMLDOMDocument * This,
             VARIANT ontransformnodeSink);
    } IXMLDOMDocumentVtbl;
    struct IXMLDOMDocument
    {
         struct IXMLDOMDocumentVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMNodeList;
    typedef struct IXMLDOMNodeListVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMNodeList * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMNodeList * This);
        ULONG (  *Release )(
            IXMLDOMNodeList * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMNodeList * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMNodeList * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMNodeList * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMNodeList * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_item )(
            IXMLDOMNodeList * This,
             long index,
             IXMLDOMNode **listItem);
         HRESULT (  *get_length )(
            IXMLDOMNodeList * This,
             long *listLength);
         HRESULT (  *nextNode )(
            IXMLDOMNodeList * This,
             IXMLDOMNode **nextItem);
         HRESULT (  *reset )(
            IXMLDOMNodeList * This);
         HRESULT (  *get__newEnum )(
            IXMLDOMNodeList * This,
             IUnknown **ppUnk);
    } IXMLDOMNodeListVtbl;
    struct IXMLDOMNodeList
    {
         struct IXMLDOMNodeListVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMNamedNodeMap;
    typedef struct IXMLDOMNamedNodeMapVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMNamedNodeMap * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMNamedNodeMap * This);
        ULONG (  *Release )(
            IXMLDOMNamedNodeMap * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMNamedNodeMap * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMNamedNodeMap * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMNamedNodeMap * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMNamedNodeMap * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *getNamedItem )(
            IXMLDOMNamedNodeMap * This,
             BSTR name,
             IXMLDOMNode **namedItem);
         HRESULT (  *setNamedItem )(
            IXMLDOMNamedNodeMap * This,
             IXMLDOMNode *newItem,
             IXMLDOMNode **nameItem);
         HRESULT (  *removeNamedItem )(
            IXMLDOMNamedNodeMap * This,
             BSTR name,
             IXMLDOMNode **namedItem);
         HRESULT (  *get_item )(
            IXMLDOMNamedNodeMap * This,
             long index,
             IXMLDOMNode **listItem);
         HRESULT (  *get_length )(
            IXMLDOMNamedNodeMap * This,
             long *listLength);
         HRESULT (  *getQualifiedItem )(
            IXMLDOMNamedNodeMap * This,
             BSTR baseName,
             BSTR namespaceURI,
             IXMLDOMNode **qualifiedItem);
         HRESULT (  *removeQualifiedItem )(
            IXMLDOMNamedNodeMap * This,
             BSTR baseName,
             BSTR namespaceURI,
             IXMLDOMNode **qualifiedItem);
         HRESULT (  *nextNode )(
            IXMLDOMNamedNodeMap * This,
             IXMLDOMNode **nextItem);
         HRESULT (  *reset )(
            IXMLDOMNamedNodeMap * This);
         HRESULT (  *get__newEnum )(
            IXMLDOMNamedNodeMap * This,
             IUnknown **ppUnk);
    } IXMLDOMNamedNodeMapVtbl;
    struct IXMLDOMNamedNodeMap
    {
         struct IXMLDOMNamedNodeMapVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMCharacterData;
    typedef struct IXMLDOMCharacterDataVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMCharacterData * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMCharacterData * This);
        ULONG (  *Release )(
            IXMLDOMCharacterData * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMCharacterData * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMCharacterData * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMCharacterData * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMCharacterData * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMCharacterData * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMCharacterData * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMCharacterData * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMCharacterData * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMCharacterData * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMCharacterData * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMCharacterData * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMCharacterData * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMCharacterData * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMCharacterData * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMCharacterData * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMCharacterData * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMCharacterData * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMCharacterData * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMCharacterData * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMCharacterData * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMCharacterData * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMCharacterData * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMCharacterData * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMCharacterData * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMCharacterData * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMCharacterData * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMCharacterData * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMCharacterData * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMCharacterData * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_data )(
            IXMLDOMCharacterData * This,
             BSTR *data);
         HRESULT (  *put_data )(
            IXMLDOMCharacterData * This,
             BSTR data);
         HRESULT (  *get_length )(
            IXMLDOMCharacterData * This,
             long *dataLength);
         HRESULT (  *substringData )(
            IXMLDOMCharacterData * This,
             long offset,
             long count,
             BSTR *data);
         HRESULT (  *appendData )(
            IXMLDOMCharacterData * This,
             BSTR data);
         HRESULT (  *insertData )(
            IXMLDOMCharacterData * This,
             long offset,
             BSTR data);
         HRESULT (  *deleteData )(
            IXMLDOMCharacterData * This,
             long offset,
             long count);
         HRESULT (  *replaceData )(
            IXMLDOMCharacterData * This,
             long offset,
             long count,
             BSTR data);
    } IXMLDOMCharacterDataVtbl;
    struct IXMLDOMCharacterData
    {
         struct IXMLDOMCharacterDataVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMAttribute;
    typedef struct IXMLDOMAttributeVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMAttribute * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMAttribute * This);
        ULONG (  *Release )(
            IXMLDOMAttribute * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMAttribute * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMAttribute * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMAttribute * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMAttribute * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMAttribute * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMAttribute * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMAttribute * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMAttribute * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMAttribute * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMAttribute * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMAttribute * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMAttribute * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMAttribute * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMAttribute * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMAttribute * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMAttribute * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMAttribute * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMAttribute * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMAttribute * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMAttribute * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMAttribute * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMAttribute * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMAttribute * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMAttribute * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMAttribute * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMAttribute * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMAttribute * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMAttribute * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMAttribute * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMAttribute * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_name )(
            IXMLDOMAttribute * This,
             BSTR *attributeName);
         HRESULT (  *get_value )(
            IXMLDOMAttribute * This,
             VARIANT *attributeValue);
         HRESULT (  *put_value )(
            IXMLDOMAttribute * This,
             VARIANT attributeValue);
    } IXMLDOMAttributeVtbl;
    struct IXMLDOMAttribute
    {
         struct IXMLDOMAttributeVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMElement;
    typedef struct IXMLDOMElementVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMElement * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMElement * This);
        ULONG (  *Release )(
            IXMLDOMElement * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMElement * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMElement * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMElement * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMElement * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMElement * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMElement * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMElement * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMElement * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMElement * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMElement * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMElement * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMElement * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMElement * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMElement * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMElement * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMElement * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMElement * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMElement * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMElement * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMElement * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMElement * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMElement * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMElement * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMElement * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMElement * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMElement * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMElement * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMElement * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMElement * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMElement * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMElement * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMElement * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMElement * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMElement * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMElement * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMElement * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMElement * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMElement * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMElement * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMElement * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_tagName )(
            IXMLDOMElement * This,
             BSTR *tagName);
         HRESULT (  *getAttribute )(
            IXMLDOMElement * This,
             BSTR name,
             VARIANT *value);
         HRESULT (  *setAttribute )(
            IXMLDOMElement * This,
             BSTR name,
             VARIANT value);
         HRESULT (  *removeAttribute )(
            IXMLDOMElement * This,
             BSTR name);
         HRESULT (  *getAttributeNode )(
            IXMLDOMElement * This,
             BSTR name,
             IXMLDOMAttribute **attributeNode);
         HRESULT (  *setAttributeNode )(
            IXMLDOMElement * This,
             IXMLDOMAttribute *DOMAttribute,
             IXMLDOMAttribute **attributeNode);
         HRESULT (  *removeAttributeNode )(
            IXMLDOMElement * This,
             IXMLDOMAttribute *DOMAttribute,
             IXMLDOMAttribute **attributeNode);
         HRESULT (  *getElementsByTagName )(
            IXMLDOMElement * This,
             BSTR tagName,
             IXMLDOMNodeList **resultList);
         HRESULT (  *normalize )(
            IXMLDOMElement * This);
    } IXMLDOMElementVtbl;
    struct IXMLDOMElement
    {
         struct IXMLDOMElementVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMText;
    typedef struct IXMLDOMTextVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMText * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMText * This);
        ULONG (  *Release )(
            IXMLDOMText * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMText * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMText * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMText * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMText * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMText * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMText * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMText * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMText * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMText * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMText * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMText * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMText * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMText * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMText * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMText * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMText * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMText * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMText * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMText * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMText * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMText * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMText * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMText * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMText * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMText * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMText * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMText * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMText * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMText * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMText * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMText * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMText * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMText * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMText * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMText * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMText * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMText * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMText * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMText * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMText * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_data )(
            IXMLDOMText * This,
             BSTR *data);
         HRESULT (  *put_data )(
            IXMLDOMText * This,
             BSTR data);
         HRESULT (  *get_length )(
            IXMLDOMText * This,
             long *dataLength);
         HRESULT (  *substringData )(
            IXMLDOMText * This,
             long offset,
             long count,
             BSTR *data);
         HRESULT (  *appendData )(
            IXMLDOMText * This,
             BSTR data);
         HRESULT (  *insertData )(
            IXMLDOMText * This,
             long offset,
             BSTR data);
         HRESULT (  *deleteData )(
            IXMLDOMText * This,
             long offset,
             long count);
         HRESULT (  *replaceData )(
            IXMLDOMText * This,
             long offset,
             long count,
             BSTR data);
         HRESULT (  *splitText )(
            IXMLDOMText * This,
             long offset,
             IXMLDOMText **rightHandTextNode);
    } IXMLDOMTextVtbl;
    struct IXMLDOMText
    {
         struct IXMLDOMTextVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMComment;
    typedef struct IXMLDOMCommentVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMComment * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMComment * This);
        ULONG (  *Release )(
            IXMLDOMComment * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMComment * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMComment * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMComment * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMComment * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMComment * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMComment * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMComment * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMComment * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMComment * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMComment * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMComment * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMComment * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMComment * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMComment * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMComment * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMComment * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMComment * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMComment * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMComment * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMComment * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMComment * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMComment * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMComment * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMComment * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMComment * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMComment * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMComment * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMComment * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMComment * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMComment * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMComment * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMComment * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMComment * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMComment * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMComment * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMComment * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMComment * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMComment * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMComment * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMComment * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_data )(
            IXMLDOMComment * This,
             BSTR *data);
         HRESULT (  *put_data )(
            IXMLDOMComment * This,
             BSTR data);
         HRESULT (  *get_length )(
            IXMLDOMComment * This,
             long *dataLength);
         HRESULT (  *substringData )(
            IXMLDOMComment * This,
             long offset,
             long count,
             BSTR *data);
         HRESULT (  *appendData )(
            IXMLDOMComment * This,
             BSTR data);
         HRESULT (  *insertData )(
            IXMLDOMComment * This,
             long offset,
             BSTR data);
         HRESULT (  *deleteData )(
            IXMLDOMComment * This,
             long offset,
             long count);
         HRESULT (  *replaceData )(
            IXMLDOMComment * This,
             long offset,
             long count,
             BSTR data);
    } IXMLDOMCommentVtbl;
    struct IXMLDOMComment
    {
         struct IXMLDOMCommentVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMProcessingInstruction;
    typedef struct IXMLDOMProcessingInstructionVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMProcessingInstruction * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMProcessingInstruction * This);
        ULONG (  *Release )(
            IXMLDOMProcessingInstruction * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMProcessingInstruction * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMProcessingInstruction * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMProcessingInstruction * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMProcessingInstruction * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMProcessingInstruction * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMProcessingInstruction * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMProcessingInstruction * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMProcessingInstruction * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMProcessingInstruction * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMProcessingInstruction * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMProcessingInstruction * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMProcessingInstruction * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMProcessingInstruction * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMProcessingInstruction * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMProcessingInstruction * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMProcessingInstruction * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMProcessingInstruction * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMProcessingInstruction * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMProcessingInstruction * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMProcessingInstruction * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMProcessingInstruction * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMProcessingInstruction * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMProcessingInstruction * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMProcessingInstruction * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMProcessingInstruction * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMProcessingInstruction * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_target )(
            IXMLDOMProcessingInstruction * This,
             BSTR *name);
         HRESULT (  *get_data )(
            IXMLDOMProcessingInstruction * This,
             BSTR *value);
         HRESULT (  *put_data )(
            IXMLDOMProcessingInstruction * This,
             BSTR value);
    } IXMLDOMProcessingInstructionVtbl;
    struct IXMLDOMProcessingInstruction
    {
         struct IXMLDOMProcessingInstructionVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMCDATASection;
    typedef struct IXMLDOMCDATASectionVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMCDATASection * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMCDATASection * This);
        ULONG (  *Release )(
            IXMLDOMCDATASection * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMCDATASection * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMCDATASection * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMCDATASection * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMCDATASection * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMCDATASection * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMCDATASection * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMCDATASection * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMCDATASection * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMCDATASection * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMCDATASection * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMCDATASection * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMCDATASection * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMCDATASection * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMCDATASection * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMCDATASection * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMCDATASection * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMCDATASection * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMCDATASection * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMCDATASection * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMCDATASection * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMCDATASection * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMCDATASection * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMCDATASection * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMCDATASection * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMCDATASection * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMCDATASection * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMCDATASection * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMCDATASection * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMCDATASection * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_data )(
            IXMLDOMCDATASection * This,
             BSTR *data);
         HRESULT (  *put_data )(
            IXMLDOMCDATASection * This,
             BSTR data);
         HRESULT (  *get_length )(
            IXMLDOMCDATASection * This,
             long *dataLength);
         HRESULT (  *substringData )(
            IXMLDOMCDATASection * This,
             long offset,
             long count,
             BSTR *data);
         HRESULT (  *appendData )(
            IXMLDOMCDATASection * This,
             BSTR data);
         HRESULT (  *insertData )(
            IXMLDOMCDATASection * This,
             long offset,
             BSTR data);
         HRESULT (  *deleteData )(
            IXMLDOMCDATASection * This,
             long offset,
             long count);
         HRESULT (  *replaceData )(
            IXMLDOMCDATASection * This,
             long offset,
             long count,
             BSTR data);
         HRESULT (  *splitText )(
            IXMLDOMCDATASection * This,
             long offset,
             IXMLDOMText **rightHandTextNode);
    } IXMLDOMCDATASectionVtbl;
    struct IXMLDOMCDATASection
    {
         struct IXMLDOMCDATASectionVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMDocumentType;
    typedef struct IXMLDOMDocumentTypeVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMDocumentType * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMDocumentType * This);
        ULONG (  *Release )(
            IXMLDOMDocumentType * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMDocumentType * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMDocumentType * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMDocumentType * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMDocumentType * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMDocumentType * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMDocumentType * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMDocumentType * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMDocumentType * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMDocumentType * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMDocumentType * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMDocumentType * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMDocumentType * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMDocumentType * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMDocumentType * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMDocumentType * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMDocumentType * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMDocumentType * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMDocumentType * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMDocumentType * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMDocumentType * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMDocumentType * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMDocumentType * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMDocumentType * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMDocumentType * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMDocumentType * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMDocumentType * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMDocumentType * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMDocumentType * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMDocumentType * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_name )(
            IXMLDOMDocumentType * This,
             BSTR *rootName);
         HRESULT (  *get_entities )(
            IXMLDOMDocumentType * This,
             IXMLDOMNamedNodeMap **entityMap);
         HRESULT (  *get_notations )(
            IXMLDOMDocumentType * This,
             IXMLDOMNamedNodeMap **notationMap);
    } IXMLDOMDocumentTypeVtbl;
    struct IXMLDOMDocumentType
    {
         struct IXMLDOMDocumentTypeVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMNotation;
    typedef struct IXMLDOMNotationVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMNotation * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMNotation * This);
        ULONG (  *Release )(
            IXMLDOMNotation * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMNotation * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMNotation * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMNotation * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMNotation * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMNotation * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMNotation * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMNotation * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMNotation * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMNotation * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMNotation * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMNotation * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMNotation * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMNotation * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMNotation * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMNotation * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMNotation * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMNotation * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMNotation * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMNotation * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMNotation * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMNotation * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMNotation * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMNotation * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMNotation * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMNotation * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMNotation * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMNotation * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMNotation * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMNotation * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMNotation * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMNotation * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMNotation * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMNotation * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMNotation * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMNotation * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMNotation * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMNotation * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMNotation * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMNotation * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMNotation * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_publicId )(
            IXMLDOMNotation * This,
             VARIANT *publicID);
         HRESULT (  *get_systemId )(
            IXMLDOMNotation * This,
             VARIANT *systemID);
    } IXMLDOMNotationVtbl;
    struct IXMLDOMNotation
    {
         struct IXMLDOMNotationVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMEntity;
    typedef struct IXMLDOMEntityVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMEntity * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMEntity * This);
        ULONG (  *Release )(
            IXMLDOMEntity * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMEntity * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMEntity * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMEntity * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMEntity * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMEntity * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMEntity * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMEntity * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMEntity * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMEntity * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMEntity * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMEntity * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMEntity * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMEntity * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMEntity * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMEntity * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMEntity * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMEntity * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMEntity * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMEntity * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMEntity * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMEntity * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMEntity * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMEntity * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMEntity * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMEntity * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMEntity * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMEntity * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMEntity * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMEntity * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMEntity * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMEntity * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMEntity * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMEntity * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMEntity * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMEntity * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMEntity * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMEntity * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMEntity * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMEntity * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMEntity * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *get_publicId )(
            IXMLDOMEntity * This,
             VARIANT *publicID);
         HRESULT (  *get_systemId )(
            IXMLDOMEntity * This,
             VARIANT *systemID);
         HRESULT (  *get_notationName )(
            IXMLDOMEntity * This,
             BSTR *name);
    } IXMLDOMEntityVtbl;
    struct IXMLDOMEntity
    {
         struct IXMLDOMEntityVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMEntityReference;
    typedef struct IXMLDOMEntityReferenceVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMEntityReference * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMEntityReference * This);
        ULONG (  *Release )(
            IXMLDOMEntityReference * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMEntityReference * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMEntityReference * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMEntityReference * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMEntityReference * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXMLDOMEntityReference * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXMLDOMEntityReference * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXMLDOMEntityReference * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXMLDOMEntityReference * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXMLDOMEntityReference * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXMLDOMEntityReference * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXMLDOMEntityReference * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXMLDOMEntityReference * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXMLDOMEntityReference * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXMLDOMEntityReference * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXMLDOMEntityReference * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXMLDOMEntityReference * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXMLDOMEntityReference * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXMLDOMEntityReference * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXMLDOMEntityReference * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXMLDOMEntityReference * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXMLDOMEntityReference * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXMLDOMEntityReference * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXMLDOMEntityReference * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXMLDOMEntityReference * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXMLDOMEntityReference * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXMLDOMEntityReference * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXMLDOMEntityReference * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXMLDOMEntityReference * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXMLDOMEntityReference * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
    } IXMLDOMEntityReferenceVtbl;
    struct IXMLDOMEntityReference
    {
         struct IXMLDOMEntityReferenceVtbl *lpVtbl;
    };
extern const IID IID_IXMLDOMParseError;
    typedef struct IXMLDOMParseErrorVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDOMParseError * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDOMParseError * This);
        ULONG (  *Release )(
            IXMLDOMParseError * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDOMParseError * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDOMParseError * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDOMParseError * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDOMParseError * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_errorCode )(
            IXMLDOMParseError * This,
             long *errorCode);
         HRESULT (  *get_url )(
            IXMLDOMParseError * This,
             BSTR *urlString);
         HRESULT (  *get_reason )(
            IXMLDOMParseError * This,
             BSTR *reasonString);
         HRESULT (  *get_srcText )(
            IXMLDOMParseError * This,
             BSTR *sourceString);
         HRESULT (  *get_line )(
            IXMLDOMParseError * This,
             long *lineNumber);
         HRESULT (  *get_linepos )(
            IXMLDOMParseError * This,
             long *linePosition);
         HRESULT (  *get_filepos )(
            IXMLDOMParseError * This,
             long *filePosition);
    } IXMLDOMParseErrorVtbl;
    struct IXMLDOMParseError
    {
         struct IXMLDOMParseErrorVtbl *lpVtbl;
    };
extern const IID IID_IXTLRuntime;
    typedef struct IXTLRuntimeVtbl
    {
        HRESULT (  *QueryInterface )(
            IXTLRuntime * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXTLRuntime * This);
        ULONG (  *Release )(
            IXTLRuntime * This);
        HRESULT (  *GetTypeInfoCount )(
            IXTLRuntime * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXTLRuntime * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXTLRuntime * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXTLRuntime * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_nodeName )(
            IXTLRuntime * This,
             BSTR *name);
         HRESULT (  *get_nodeValue )(
            IXTLRuntime * This,
             VARIANT *value);
         HRESULT (  *put_nodeValue )(
            IXTLRuntime * This,
             VARIANT value);
         HRESULT (  *get_nodeType )(
            IXTLRuntime * This,
             DOMNodeType *type);
         HRESULT (  *get_parentNode )(
            IXTLRuntime * This,
             IXMLDOMNode **parent);
         HRESULT (  *get_childNodes )(
            IXTLRuntime * This,
             IXMLDOMNodeList **childList);
         HRESULT (  *get_firstChild )(
            IXTLRuntime * This,
             IXMLDOMNode **firstChild);
         HRESULT (  *get_lastChild )(
            IXTLRuntime * This,
             IXMLDOMNode **lastChild);
         HRESULT (  *get_previousSibling )(
            IXTLRuntime * This,
             IXMLDOMNode **previousSibling);
         HRESULT (  *get_nextSibling )(
            IXTLRuntime * This,
             IXMLDOMNode **nextSibling);
         HRESULT (  *get_attributes )(
            IXTLRuntime * This,
             IXMLDOMNamedNodeMap **attributeMap);
         HRESULT (  *insertBefore )(
            IXTLRuntime * This,
             IXMLDOMNode *newChild,
             VARIANT refChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *replaceChild )(
            IXTLRuntime * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode *oldChild,
             IXMLDOMNode **outOldChild);
         HRESULT (  *removeChild )(
            IXTLRuntime * This,
             IXMLDOMNode *childNode,
             IXMLDOMNode **oldChild);
         HRESULT (  *appendChild )(
            IXTLRuntime * This,
             IXMLDOMNode *newChild,
             IXMLDOMNode **outNewChild);
         HRESULT (  *hasChildNodes )(
            IXTLRuntime * This,
             VARIANT_BOOL *hasChild);
         HRESULT (  *get_ownerDocument )(
            IXTLRuntime * This,
             IXMLDOMDocument **DOMDocument);
         HRESULT (  *cloneNode )(
            IXTLRuntime * This,
             VARIANT_BOOL deep,
             IXMLDOMNode **cloneRoot);
         HRESULT (  *get_nodeTypeString )(
            IXTLRuntime * This,
             BSTR *nodeType);
         HRESULT (  *get_text )(
            IXTLRuntime * This,
             BSTR *text);
         HRESULT (  *put_text )(
            IXTLRuntime * This,
             BSTR text);
         HRESULT (  *get_specified )(
            IXTLRuntime * This,
             VARIANT_BOOL *isSpecified);
         HRESULT (  *get_definition )(
            IXTLRuntime * This,
             IXMLDOMNode **definitionNode);
         HRESULT (  *get_nodeTypedValue )(
            IXTLRuntime * This,
             VARIANT *typedValue);
         HRESULT (  *put_nodeTypedValue )(
            IXTLRuntime * This,
             VARIANT typedValue);
         HRESULT (  *get_dataType )(
            IXTLRuntime * This,
             VARIANT *dataTypeName);
         HRESULT (  *put_dataType )(
            IXTLRuntime * This,
             BSTR dataTypeName);
         HRESULT (  *get_xml )(
            IXTLRuntime * This,
             BSTR *xmlString);
         HRESULT (  *transformNode )(
            IXTLRuntime * This,
             IXMLDOMNode *stylesheet,
             BSTR *xmlString);
         HRESULT (  *selectNodes )(
            IXTLRuntime * This,
             BSTR queryString,
             IXMLDOMNodeList **resultList);
         HRESULT (  *selectSingleNode )(
            IXTLRuntime * This,
             BSTR queryString,
             IXMLDOMNode **resultNode);
         HRESULT (  *get_parsed )(
            IXTLRuntime * This,
             VARIANT_BOOL *isParsed);
         HRESULT (  *get_namespaceURI )(
            IXTLRuntime * This,
             BSTR *namespaceURI);
         HRESULT (  *get_prefix )(
            IXTLRuntime * This,
             BSTR *prefixString);
         HRESULT (  *get_baseName )(
            IXTLRuntime * This,
             BSTR *nameString);
         HRESULT (  *transformNodeToObject )(
            IXTLRuntime * This,
             IXMLDOMNode *stylesheet,
             VARIANT outputObject);
         HRESULT (  *uniqueID )(
            IXTLRuntime * This,
             IXMLDOMNode *pNode,
             long *pID);
         HRESULT (  *depth )(
            IXTLRuntime * This,
             IXMLDOMNode *pNode,
             long *pDepth);
         HRESULT (  *childNumber )(
            IXTLRuntime * This,
             IXMLDOMNode *pNode,
             long *pNumber);
         HRESULT (  *ancestorChildNumber )(
            IXTLRuntime * This,
             BSTR bstrNodeName,
             IXMLDOMNode *pNode,
             long *pNumber);
         HRESULT (  *absoluteChildNumber )(
            IXTLRuntime * This,
             IXMLDOMNode *pNode,
             long *pNumber);
         HRESULT (  *formatIndex )(
            IXTLRuntime * This,
             long lIndex,
             BSTR bstrFormat,
             BSTR *pbstrFormattedString);
         HRESULT (  *formatNumber )(
            IXTLRuntime * This,
             double dblNumber,
             BSTR bstrFormat,
             BSTR *pbstrFormattedString);
         HRESULT (  *formatDate )(
            IXTLRuntime * This,
             VARIANT varDate,
             BSTR bstrFormat,
             VARIANT varDestLocale,
             BSTR *pbstrFormattedString);
         HRESULT (  *formatTime )(
            IXTLRuntime * This,
             VARIANT varTime,
             BSTR bstrFormat,
             VARIANT varDestLocale,
             BSTR *pbstrFormattedString);
    } IXTLRuntimeVtbl;
    struct IXTLRuntime
    {
         struct IXTLRuntimeVtbl *lpVtbl;
    };
extern const IID DIID_XMLDOMDocumentEvents;
    typedef struct XMLDOMDocumentEventsVtbl
    {
        HRESULT (  *QueryInterface )(
            XMLDOMDocumentEvents * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            XMLDOMDocumentEvents * This);
        ULONG (  *Release )(
            XMLDOMDocumentEvents * This);
        HRESULT (  *GetTypeInfoCount )(
            XMLDOMDocumentEvents * This,
              UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            XMLDOMDocumentEvents * This,
             UINT iTInfo,
             LCID lcid,
              ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            XMLDOMDocumentEvents * This,
              const IID * const riid,
              LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
              DISPID *rgDispId);
         HRESULT (  *Invoke )(
            XMLDOMDocumentEvents * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
    } XMLDOMDocumentEventsVtbl;
    struct XMLDOMDocumentEvents
    {
         struct XMLDOMDocumentEventsVtbl *lpVtbl;
    };
extern const CLSID CLSID_DOMDocument;
extern const CLSID CLSID_DOMFreeThreadedDocument;
extern const IID IID_IXMLHttpRequest;
    typedef struct IXMLHttpRequestVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLHttpRequest * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLHttpRequest * This);
        ULONG (  *Release )(
            IXMLHttpRequest * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLHttpRequest * This,
              UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLHttpRequest * This,
             UINT iTInfo,
             LCID lcid,
              ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLHttpRequest * This,
              const IID * const riid,
              LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
              DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLHttpRequest * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *open )(
            IXMLHttpRequest * This,
              BSTR bstrMethod,
              BSTR bstrUrl,
             VARIANT varAsync,
             VARIANT bstrUser,
             VARIANT bstrPassword);
         HRESULT (  *setRequestHeader )(
            IXMLHttpRequest * This,
              BSTR bstrHeader,
              BSTR bstrValue);
         HRESULT (  *getResponseHeader )(
            IXMLHttpRequest * This,
              BSTR bstrHeader,
              BSTR *pbstrValue);
         HRESULT (  *getAllResponseHeaders )(
            IXMLHttpRequest * This,
              BSTR *pbstrHeaders);
         HRESULT (  *send )(
            IXMLHttpRequest * This,
             VARIANT varBody);
         HRESULT (  *abort )(
            IXMLHttpRequest * This);
         HRESULT (  *get_status )(
            IXMLHttpRequest * This,
              long *plStatus);
         HRESULT (  *get_statusText )(
            IXMLHttpRequest * This,
              BSTR *pbstrStatus);
         HRESULT (  *get_responseXML )(
            IXMLHttpRequest * This,
              IDispatch **ppBody);
         HRESULT (  *get_responseText )(
            IXMLHttpRequest * This,
              BSTR *pbstrBody);
         HRESULT (  *get_responseBody )(
            IXMLHttpRequest * This,
              VARIANT *pvarBody);
         HRESULT (  *get_responseStream )(
            IXMLHttpRequest * This,
              VARIANT *pvarBody);
         HRESULT (  *get_readyState )(
            IXMLHttpRequest * This,
              long *plState);
         HRESULT (  *put_onreadystatechange )(
            IXMLHttpRequest * This,
              IDispatch *pReadyStateSink);
    } IXMLHttpRequestVtbl;
    struct IXMLHttpRequest
    {
         struct IXMLHttpRequestVtbl *lpVtbl;
    };
extern const CLSID CLSID_XMLHTTPRequest;
extern const IID IID_IXMLDSOControl;
    typedef struct IXMLDSOControlVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDSOControl * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDSOControl * This);
        ULONG (  *Release )(
            IXMLDSOControl * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDSOControl * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDSOControl * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDSOControl * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDSOControl * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_XMLDocument )(
            IXMLDSOControl * This,
             IXMLDOMDocument **ppDoc);
         HRESULT (  *put_XMLDocument )(
            IXMLDSOControl * This,
             IXMLDOMDocument *ppDoc);
         HRESULT (  *get_JavaDSOCompatible )(
            IXMLDSOControl * This,
             BOOL *fJavaDSOCompatible);
         HRESULT (  *put_JavaDSOCompatible )(
            IXMLDSOControl * This,
             BOOL fJavaDSOCompatible);
         HRESULT (  *get_readyState )(
            IXMLDSOControl * This,
             long *state);
    } IXMLDSOControlVtbl;
    struct IXMLDSOControl
    {
         struct IXMLDSOControlVtbl *lpVtbl;
    };
extern const CLSID CLSID_XMLDSOControl;
extern const IID IID_IXMLElementCollection;
    typedef struct IXMLElementCollectionVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLElementCollection * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLElementCollection * This);
        ULONG (  *Release )(
            IXMLElementCollection * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLElementCollection * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLElementCollection * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLElementCollection * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLElementCollection * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *put_length )(
            IXMLElementCollection * This,
             long v);
         HRESULT (  *get_length )(
            IXMLElementCollection * This,
             long *p);
         HRESULT (  *get__newEnum )(
            IXMLElementCollection * This,
             IUnknown **ppUnk);
         HRESULT (  *item )(
            IXMLElementCollection * This,
             VARIANT var1,
             VARIANT var2,
             IDispatch **ppDisp);
    } IXMLElementCollectionVtbl;
    struct IXMLElementCollection
    {
         struct IXMLElementCollectionVtbl *lpVtbl;
    };
extern const IID IID_IXMLDocument;
    typedef struct IXMLDocumentVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDocument * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDocument * This);
        ULONG (  *Release )(
            IXMLDocument * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDocument * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDocument * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDocument * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDocument * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_root )(
            IXMLDocument * This,
             IXMLElement **p);
         HRESULT (  *get_fileSize )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_fileModifiedDate )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_fileUpdatedDate )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_URL )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *put_URL )(
            IXMLDocument * This,
             BSTR p);
         HRESULT (  *get_mimeType )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_readyState )(
            IXMLDocument * This,
             long *pl);
         HRESULT (  *get_charset )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *put_charset )(
            IXMLDocument * This,
             BSTR p);
         HRESULT (  *get_version )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_doctype )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *get_dtdURL )(
            IXMLDocument * This,
             BSTR *p);
         HRESULT (  *createElement )(
            IXMLDocument * This,
             VARIANT vType,
             VARIANT var1,
             IXMLElement **ppElem);
    } IXMLDocumentVtbl;
    struct IXMLDocument
    {
         struct IXMLDocumentVtbl *lpVtbl;
    };
extern const IID IID_IXMLDocument2;
    typedef struct IXMLDocument2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLDocument2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLDocument2 * This);
        ULONG (  *Release )(
            IXMLDocument2 * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLDocument2 * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLDocument2 * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLDocument2 * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLDocument2 * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_root )(
            IXMLDocument2 * This,
             IXMLElement2 **p);
         HRESULT (  *get_fileSize )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_fileModifiedDate )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_fileUpdatedDate )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_URL )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *put_URL )(
            IXMLDocument2 * This,
             BSTR p);
         HRESULT (  *get_mimeType )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_readyState )(
            IXMLDocument2 * This,
             long *pl);
         HRESULT (  *get_charset )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *put_charset )(
            IXMLDocument2 * This,
             BSTR p);
         HRESULT (  *get_version )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_doctype )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *get_dtdURL )(
            IXMLDocument2 * This,
             BSTR *p);
         HRESULT (  *createElement )(
            IXMLDocument2 * This,
             VARIANT vType,
             VARIANT var1,
             IXMLElement2 **ppElem);
         HRESULT (  *get_async )(
            IXMLDocument2 * This,
             VARIANT_BOOL *pf);
         HRESULT (  *put_async )(
            IXMLDocument2 * This,
             VARIANT_BOOL f);
    } IXMLDocument2Vtbl;
    struct IXMLDocument2
    {
         struct IXMLDocument2Vtbl *lpVtbl;
    };
extern const IID IID_IXMLElement;
    typedef struct IXMLElementVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLElement * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLElement * This);
        ULONG (  *Release )(
            IXMLElement * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLElement * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLElement * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLElement * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLElement * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_tagName )(
            IXMLElement * This,
             BSTR *p);
         HRESULT (  *put_tagName )(
            IXMLElement * This,
             BSTR p);
         HRESULT (  *get_parent )(
            IXMLElement * This,
             IXMLElement **ppParent);
         HRESULT (  *setAttribute )(
            IXMLElement * This,
             BSTR strPropertyName,
             VARIANT PropertyValue);
         HRESULT (  *getAttribute )(
            IXMLElement * This,
             BSTR strPropertyName,
             VARIANT *PropertyValue);
         HRESULT (  *removeAttribute )(
            IXMLElement * This,
             BSTR strPropertyName);
         HRESULT (  *get_children )(
            IXMLElement * This,
             IXMLElementCollection **pp);
         HRESULT (  *get_type )(
            IXMLElement * This,
             long *plType);
         HRESULT (  *get_text )(
            IXMLElement * This,
             BSTR *p);
         HRESULT (  *put_text )(
            IXMLElement * This,
             BSTR p);
         HRESULT (  *addChild )(
            IXMLElement * This,
             IXMLElement *pChildElem,
            long lIndex,
            long lReserved);
         HRESULT (  *removeChild )(
            IXMLElement * This,
             IXMLElement *pChildElem);
    } IXMLElementVtbl;
    struct IXMLElement
    {
         struct IXMLElementVtbl *lpVtbl;
    };
extern const IID IID_IXMLElement2;
    typedef struct IXMLElement2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLElement2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLElement2 * This);
        ULONG (  *Release )(
            IXMLElement2 * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLElement2 * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLElement2 * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLElement2 * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLElement2 * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_tagName )(
            IXMLElement2 * This,
             BSTR *p);
         HRESULT (  *put_tagName )(
            IXMLElement2 * This,
             BSTR p);
         HRESULT (  *get_parent )(
            IXMLElement2 * This,
             IXMLElement2 **ppParent);
         HRESULT (  *setAttribute )(
            IXMLElement2 * This,
             BSTR strPropertyName,
             VARIANT PropertyValue);
         HRESULT (  *getAttribute )(
            IXMLElement2 * This,
             BSTR strPropertyName,
             VARIANT *PropertyValue);
         HRESULT (  *removeAttribute )(
            IXMLElement2 * This,
             BSTR strPropertyName);
         HRESULT (  *get_children )(
            IXMLElement2 * This,
             IXMLElementCollection **pp);
         HRESULT (  *get_type )(
            IXMLElement2 * This,
             long *plType);
         HRESULT (  *get_text )(
            IXMLElement2 * This,
             BSTR *p);
         HRESULT (  *put_text )(
            IXMLElement2 * This,
             BSTR p);
         HRESULT (  *addChild )(
            IXMLElement2 * This,
             IXMLElement2 *pChildElem,
            long lIndex,
            long lReserved);
         HRESULT (  *removeChild )(
            IXMLElement2 * This,
             IXMLElement2 *pChildElem);
         HRESULT (  *get_attributes )(
            IXMLElement2 * This,
             IXMLElementCollection **pp);
    } IXMLElement2Vtbl;
    struct IXMLElement2
    {
         struct IXMLElement2Vtbl *lpVtbl;
    };
extern const IID IID_IXMLAttribute;
    typedef struct IXMLAttributeVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLAttribute * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLAttribute * This);
        ULONG (  *Release )(
            IXMLAttribute * This);
        HRESULT (  *GetTypeInfoCount )(
            IXMLAttribute * This,
             UINT *pctinfo);
        HRESULT (  *GetTypeInfo )(
            IXMLAttribute * This,
             UINT iTInfo,
             LCID lcid,
             ITypeInfo **ppTInfo);
        HRESULT (  *GetIDsOfNames )(
            IXMLAttribute * This,
             const IID * const riid,
             LPOLESTR *rgszNames,
             UINT cNames,
             LCID lcid,
             DISPID *rgDispId);
         HRESULT (  *Invoke )(
            IXMLAttribute * This,
             DISPID dispIdMember,
             const IID * const riid,
             LCID lcid,
             WORD wFlags,
             DISPPARAMS *pDispParams,
             VARIANT *pVarResult,
             EXCEPINFO *pExcepInfo,
             UINT *puArgErr);
         HRESULT (  *get_name )(
            IXMLAttribute * This,
             BSTR *n);
         HRESULT (  *get_value )(
            IXMLAttribute * This,
             BSTR *v);
    } IXMLAttributeVtbl;
    struct IXMLAttribute
    {
         struct IXMLAttributeVtbl *lpVtbl;
    };
extern const IID IID_IXMLError;
    typedef struct IXMLErrorVtbl
    {
        HRESULT (  *QueryInterface )(
            IXMLError * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IXMLError * This);
        ULONG (  *Release )(
            IXMLError * This);
        HRESULT (  *GetErrorInfo )(
            IXMLError * This,
            XML_ERROR *pErrorReturn);
    } IXMLErrorVtbl;
    struct IXMLError
    {
         struct IXMLErrorVtbl *lpVtbl;
    };
extern const CLSID CLSID_XMLDocument;
extern const IID CLSID_SBS_StdURLMoniker;
extern const IID CLSID_SBS_HttpProtocol;
extern const IID CLSID_SBS_FtpProtocol;
extern const IID CLSID_SBS_GopherProtocol;
extern const IID CLSID_SBS_HttpSProtocol;
extern const IID CLSID_SBS_FileProtocol;
extern const IID CLSID_SBS_MkProtocol;
extern const IID CLSID_SBS_UrlMkBindCtx;
extern const IID CLSID_SBS_SoftDistExt;
extern const IID CLSID_SBS_StdEncodingFilterFac;
extern const IID CLSID_SBS_DeCompMimeFilter;
extern const IID CLSID_SBS_CdlProtocol;
extern const IID CLSID_SBS_ClassInstallFilter;
extern const IID CLSID_SBS_InternetSecurityManager;
extern const IID CLSID_SBS_InternetZoneManager;
extern const IID IID_IAsyncMoniker;
extern const IID CLSID_StdURLMoniker;
extern const IID CLSID_HttpProtocol;
extern const IID CLSID_FtpProtocol;
extern const IID CLSID_GopherProtocol;
extern const IID CLSID_HttpSProtocol;
extern const IID CLSID_FileProtocol;
extern const IID CLSID_MkProtocol;
extern const IID CLSID_StdURLProtocol;
extern const IID CLSID_UrlMkBindCtx;
extern const IID CLSID_StdEncodingFilterFac;
extern const IID CLSID_DeCompMimeFilter;
extern const IID CLSID_CdlProtocol;
extern const IID CLSID_ClassInstallFilter;
extern const IID IID_IAsyncBindCtx;
extern HRESULT  CreateURLMoniker(LPMONIKER pMkCtx, LPCWSTR szURL, LPMONIKER  * ppmk);
extern HRESULT  CreateURLMonikerEx(LPMONIKER pMkCtx, LPCWSTR szURL, LPMONIKER  * ppmk, DWORD dwFlags);
extern HRESULT  GetClassURL(LPCWSTR szURL, CLSID *pClsID);
extern HRESULT  CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *pBSCb,
                                IEnumFORMATETC *pEFetc, IBindCtx **ppBC);
extern HRESULT  CreateURLMonikerEx2(LPMONIKER pMkCtx, IUri* pUri, LPMONIKER  * ppmk, DWORD dwFlags);
extern HRESULT  CreateAsyncBindCtxEx(IBindCtx *pbc, DWORD dwOptions, IBindStatusCallback *pBSCb, IEnumFORMATETC *pEnum,
                            IBindCtx **ppBC, DWORD reserved);
extern HRESULT  MkParseDisplayNameEx(IBindCtx *pbc, LPCWSTR szDisplayName, ULONG *pchEaten,
                                LPMONIKER *ppmk);
extern HRESULT  RegisterBindStatusCallback(LPBC pBC, IBindStatusCallback *pBSCb,
                                IBindStatusCallback**  ppBSCBPrev, DWORD dwReserved);
extern HRESULT  RevokeBindStatusCallback(LPBC pBC, IBindStatusCallback *pBSCb);
extern HRESULT  GetClassFileOrMime(LPBC pBC, LPCWSTR szFilename, LPVOID pBuffer, DWORD cbSize, LPCWSTR szMime, DWORD dwReserved, CLSID *pclsid);
extern HRESULT  IsValidURL(LPBC pBC, LPCWSTR szURL, DWORD dwReserved);
extern HRESULT  CoGetClassObjectFromURL( const IID * const rCLASSID,
            LPCWSTR szCODE, DWORD dwFileVersionMS,
            DWORD dwFileVersionLS, LPCWSTR szTYPE,
            LPBINDCTX pBindCtx, DWORD dwClsContext,
            LPVOID pvReserved, const IID * const riid, LPVOID * ppv);
extern HRESULT  FaultInIEFeature( HWND hWnd,
             uCLSSPEC *pClassSpec,
             QUERYCONTEXT *pQuery, DWORD dwFlags);
extern HRESULT  GetComponentIDFromCLSSPEC( uCLSSPEC *pClassspec,
             LPSTR * ppszComponentID);
extern HRESULT  IsAsyncMoniker(IMoniker* pmk);
extern HRESULT  CreateURLBinding(LPCWSTR lpszUrl,  IBindCtx *pbc,  IBinding **ppBdg);
extern HRESULT  RegisterMediaTypes(UINT ctypes, const LPCSTR* rgszTypes, CLIPFORMAT* rgcfTypes);
extern HRESULT  FindMediaType(LPCSTR rgszTypes,  CLIPFORMAT* rgcfTypes);
extern HRESULT  CreateFormatEnumerator( UINT cfmtetc, FORMATETC* rgfmtetc, IEnumFORMATETC** ppenumfmtetc);
extern HRESULT  RegisterFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc, DWORD reserved);
extern HRESULT  RevokeFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc);
extern HRESULT  RegisterMediaTypeClass(LPBC pBC,UINT ctypes, const LPCSTR* rgszTypes, CLSID *rgclsID, DWORD reserved);
extern HRESULT  FindMediaTypeClass(LPBC pBC, LPCSTR szType, CLSID *pclsID, DWORD reserved);
extern HRESULT  UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD dwReserved);
extern HRESULT  UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD *pdwBufferLength, DWORD dwReserved);
extern HRESULT  FindMimeFromData(
                    LPBC    pBC,
                    LPCWSTR pwzUrl,
     LPVOID  pBuffer,
                            DWORD   cbSize,
                    LPCWSTR pwzMimeProposed,
                            DWORD   dwMimeFlags,
                 LPWSTR  *ppwzMimeOut,
                  DWORD   dwReserved);
extern HRESULT  ObtainUserAgentString(
                                        DWORD dwOption,
     LPSTR pszUAOut,
                                 DWORD *cbSize);
extern HRESULT  CompareSecurityIds(BYTE* pbSecurityId1, DWORD dwLen1, BYTE* pbSecurityId2, DWORD dwLen2, DWORD dwReserved);
extern HRESULT  CompatFlagsFromClsid(CLSID *pclsid, LPDWORD pdwCompatFlags, LPDWORD pdwMiscStatusFlags);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0000_v0_0_s_ifspec;
typedef    IPersistMoniker *LPPERSISTMONIKER;
extern const IID IID_IPersistMoniker;
    typedef struct IPersistMonikerVtbl
    {
        HRESULT (  *QueryInterface )(
            IPersistMoniker * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPersistMoniker * This);
        ULONG (  *Release )(
            IPersistMoniker * This);
        HRESULT (  *GetClassID )(
            IPersistMoniker * This,
              CLSID *pClassID);
        HRESULT (  *IsDirty )(
            IPersistMoniker * This);
        HRESULT (  *Load )(
            IPersistMoniker * This,
             BOOL fFullyAvailable,
              IMoniker *pimkName,
              LPBC pibc,
             DWORD grfMode);
        HRESULT (  *Save )(
            IPersistMoniker * This,
              IMoniker *pimkName,
              LPBC pbc,
             BOOL fRemember);
        HRESULT (  *SaveCompleted )(
            IPersistMoniker * This,
              IMoniker *pimkName,
              LPBC pibc);
        HRESULT (  *GetCurMoniker )(
            IPersistMoniker * This,
              IMoniker **ppimkName);
    } IPersistMonikerVtbl;
    struct IPersistMoniker
    {
         struct IPersistMonikerVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0001_v0_0_s_ifspec;
typedef    IMonikerProp *LPMONIKERPROP;
typedef
enum __MIDL_IMonikerProp_0001
    {	MIMETYPEPROP	= 0,
	USE_SRC_URL	= 0x1,
	CLASSIDPROP	= 0x2,
	TRUSTEDDOWNLOADPROP	= 0x3,
	POPUPLEVELPROP	= 0x4
    } 	MONIKERPROPERTY;
extern const IID IID_IMonikerProp;
    typedef struct IMonikerPropVtbl
    {
        HRESULT (  *QueryInterface )(
            IMonikerProp * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IMonikerProp * This);
        ULONG (  *Release )(
            IMonikerProp * This);
        HRESULT (  *PutProperty )(
            IMonikerProp * This,
             MONIKERPROPERTY mkp,
              LPCWSTR val);
    } IMonikerPropVtbl;
    struct IMonikerProp
    {
         struct IMonikerPropVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0002_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0002_v0_0_s_ifspec;
typedef  IBindProtocol *LPBINDPROTOCOL;
extern const IID IID_IBindProtocol;
    typedef struct IBindProtocolVtbl
    {
        HRESULT (  *QueryInterface )(
            IBindProtocol * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBindProtocol * This);
        ULONG (  *Release )(
            IBindProtocol * This);
        HRESULT (  *CreateBinding )(
            IBindProtocol * This,
             LPCWSTR szUrl,
             IBindCtx *pbc,
             IBinding **ppb);
    } IBindProtocolVtbl;
    struct IBindProtocol
    {
         struct IBindProtocolVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0003_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0003_v0_0_s_ifspec;
typedef    IBinding *LPBINDING;
extern const IID IID_IBinding;
    typedef struct IBindingVtbl
    {
        HRESULT (  *QueryInterface )(
            IBinding * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBinding * This);
        ULONG (  *Release )(
            IBinding * This);
        HRESULT (  *Abort )(
            IBinding * This);
        HRESULT (  *Suspend )(
            IBinding * This);
        HRESULT (  *Resume )(
            IBinding * This);
        HRESULT (  *SetPriority )(
            IBinding * This,
             LONG nPriority);
        HRESULT (  *GetPriority )(
            IBinding * This,
              LONG *pnPriority);
         HRESULT (  *GetBindResult )(
            IBinding * This,
             CLSID *pclsidProtocol,
             DWORD *pdwResult,
             LPOLESTR *pszResult,
             DWORD *pdwReserved);
    } IBindingVtbl;
    struct IBinding
    {
         struct IBindingVtbl *lpVtbl;
    };
 HRESULT  IBinding_RemoteGetBindResult_Proxy(
    IBinding * This,
      CLSID *pclsidProtocol,
      DWORD *pdwResult,
      LPOLESTR *pszResult,
     DWORD dwReserved);
void  IBinding_RemoteGetBindResult_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0004_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0004_v0_0_s_ifspec;
typedef    IBindStatusCallback *LPBINDSTATUSCALLBACK;
typedef
enum __MIDL_IBindStatusCallback_0001
    {	BINDVERB_GET	= 0,
	BINDVERB_POST	= 0x1,
	BINDVERB_PUT	= 0x2,
	BINDVERB_CUSTOM	= 0x3
    } 	BINDVERB;
typedef
enum __MIDL_IBindStatusCallback_0002
    {	BINDINFOF_URLENCODESTGMEDDATA	= 0x1,
	BINDINFOF_URLENCODEDEXTRAINFO	= 0x2
    } 	BINDINFOF;
typedef
enum __MIDL_IBindStatusCallback_0003
    {	BINDF_ASYNCHRONOUS	= 0x1,
	BINDF_ASYNCSTORAGE	= 0x2,
	BINDF_NOPROGRESSIVERENDERING	= 0x4,
	BINDF_OFFLINEOPERATION	= 0x8,
	BINDF_GETNEWESTVERSION	= 0x10,
	BINDF_NOWRITECACHE	= 0x20,
	BINDF_NEEDFILE	= 0x40,
	BINDF_PULLDATA	= 0x80,
	BINDF_IGNORESECURITYPROBLEM	= 0x100,
	BINDF_RESYNCHRONIZE	= 0x200,
	BINDF_HYPERLINK	= 0x400,
	BINDF_NO_UI	= 0x800,
	BINDF_SILENTOPERATION	= 0x1000,
	BINDF_PRAGMA_NO_CACHE	= 0x2000,
	BINDF_GETCLASSOBJECT	= 0x4000,
	BINDF_RESERVED_1	= 0x8000,
	BINDF_FREE_THREADED	= 0x10000,
	BINDF_DIRECT_READ	= 0x20000,
	BINDF_FORMS_SUBMIT	= 0x40000,
	BINDF_GETFROMCACHE_IF_NET_FAIL	= 0x80000,
	BINDF_FROMURLMON	= 0x100000,
	BINDF_FWD_BACK	= 0x200000,
	BINDF_PREFERDEFAULTHANDLER	= 0x400000,
	BINDF_ENFORCERESTRICTED	= 0x800000
    } 	BINDF;
typedef
enum __MIDL_IBindStatusCallback_0004
    {	URL_ENCODING_NONE	= 0,
	URL_ENCODING_ENABLE_UTF8	= 0x10000000,
	URL_ENCODING_DISABLE_UTF8	= 0x20000000
    } 	URL_ENCODING;
typedef struct _tagBINDINFO
    {
    ULONG cbSize;
    LPWSTR szExtraInfo;
    STGMEDIUM stgmedData;
    DWORD grfBindInfoF;
    DWORD dwBindVerb;
    LPWSTR szCustomVerb;
    DWORD cbstgmedData;
    DWORD dwOptions;
    DWORD dwOptionsFlags;
    DWORD dwCodePage;
    SECURITY_ATTRIBUTES securityAttributes;
    IID iid;
    IUnknown *pUnk;
    DWORD dwReserved;
    } 	BINDINFO;
typedef struct _REMSECURITY_ATTRIBUTES
    {
    DWORD nLength;
    DWORD lpSecurityDescriptor;
    BOOL bInheritHandle;
    } 	REMSECURITY_ATTRIBUTES;
typedef struct _REMSECURITY_ATTRIBUTES *PREMSECURITY_ATTRIBUTES;
typedef struct _REMSECURITY_ATTRIBUTES *LPREMSECURITY_ATTRIBUTES;
typedef struct _tagRemBINDINFO
    {
    ULONG cbSize;
    LPWSTR szExtraInfo;
    DWORD grfBindInfoF;
    DWORD dwBindVerb;
    LPWSTR szCustomVerb;
    DWORD cbstgmedData;
    DWORD dwOptions;
    DWORD dwOptionsFlags;
    DWORD dwCodePage;
    REMSECURITY_ATTRIBUTES securityAttributes;
    IID iid;
    IUnknown *pUnk;
    DWORD dwReserved;
    } 	RemBINDINFO;
typedef struct tagRemFORMATETC
    {
    DWORD cfFormat;
    DWORD ptd;
    DWORD dwAspect;
    LONG lindex;
    DWORD tymed;
    } 	RemFORMATETC;
typedef struct tagRemFORMATETC *LPREMFORMATETC;
typedef
enum __MIDL_IBindStatusCallback_0005
    {	BINDINFO_OPTIONS_WININETFLAG	= 0x10000,
	BINDINFO_OPTIONS_ENABLE_UTF8	= 0x20000,
	BINDINFO_OPTIONS_DISABLE_UTF8	= 0x40000,
	BINDINFO_OPTIONS_USE_IE_ENCODING	= 0x80000,
	BINDINFO_OPTIONS_BINDTOOBJECT	= 0x100000,
	BINDINFO_OPTIONS_SECURITYOPTOUT	= 0x200000,
	BINDINFO_OPTIONS_IGNOREMIMETEXTPLAIN	= 0x400000,
	BINDINFO_OPTIONS_USEBINDSTRINGCREDS	= 0x800000,
	BINDINFO_OPTIONS_IGNOREHTTPHTTPSREDIRECTS	= 0x1000000,
	BINDINFO_OPTIONS_IGNORE_SSLERRORS_ONCE	= 0x2000000,
	BINDINFO_WPC_DOWNLOADBLOCKED	= 0x8000000,
	BINDINFO_WPC_LOGGING_ENABLED	= 0x10000000,
	BINDINFO_OPTIONS_DISABLEAUTOREDIRECTS	= 0x40000000,
	BINDINFO_OPTIONS_SHDOCVW_NAVIGATE	= 0x80000000
    } 	BINDINFO_OPTIONS;
typedef
enum __MIDL_IBindStatusCallback_0006
    {	BSCF_FIRSTDATANOTIFICATION	= 0x1,
	BSCF_INTERMEDIATEDATANOTIFICATION	= 0x2,
	BSCF_LASTDATANOTIFICATION	= 0x4,
	BSCF_DATAFULLYAVAILABLE	= 0x8,
	BSCF_AVAILABLEDATASIZEUNKNOWN	= 0x10
    } 	BSCF;
typedef
enum tagBINDSTATUS
    {	BINDSTATUS_FINDINGRESOURCE	= 1,
	BINDSTATUS_CONNECTING	= ( BINDSTATUS_FINDINGRESOURCE + 1 ) ,
	BINDSTATUS_REDIRECTING	= ( BINDSTATUS_CONNECTING + 1 ) ,
	BINDSTATUS_BEGINDOWNLOADDATA	= ( BINDSTATUS_REDIRECTING + 1 ) ,
	BINDSTATUS_DOWNLOADINGDATA	= ( BINDSTATUS_BEGINDOWNLOADDATA + 1 ) ,
	BINDSTATUS_ENDDOWNLOADDATA	= ( BINDSTATUS_DOWNLOADINGDATA + 1 ) ,
	BINDSTATUS_BEGINDOWNLOADCOMPONENTS	= ( BINDSTATUS_ENDDOWNLOADDATA + 1 ) ,
	BINDSTATUS_INSTALLINGCOMPONENTS	= ( BINDSTATUS_BEGINDOWNLOADCOMPONENTS + 1 ) ,
	BINDSTATUS_ENDDOWNLOADCOMPONENTS	= ( BINDSTATUS_INSTALLINGCOMPONENTS + 1 ) ,
	BINDSTATUS_USINGCACHEDCOPY	= ( BINDSTATUS_ENDDOWNLOADCOMPONENTS + 1 ) ,
	BINDSTATUS_SENDINGREQUEST	= ( BINDSTATUS_USINGCACHEDCOPY + 1 ) ,
	BINDSTATUS_CLASSIDAVAILABLE	= ( BINDSTATUS_SENDINGREQUEST + 1 ) ,
	BINDSTATUS_MIMETYPEAVAILABLE	= ( BINDSTATUS_CLASSIDAVAILABLE + 1 ) ,
	BINDSTATUS_CACHEFILENAMEAVAILABLE	= ( BINDSTATUS_MIMETYPEAVAILABLE + 1 ) ,
	BINDSTATUS_BEGINSYNCOPERATION	= ( BINDSTATUS_CACHEFILENAMEAVAILABLE + 1 ) ,
	BINDSTATUS_ENDSYNCOPERATION	= ( BINDSTATUS_BEGINSYNCOPERATION + 1 ) ,
	BINDSTATUS_BEGINUPLOADDATA	= ( BINDSTATUS_ENDSYNCOPERATION + 1 ) ,
	BINDSTATUS_UPLOADINGDATA	= ( BINDSTATUS_BEGINUPLOADDATA + 1 ) ,
	BINDSTATUS_ENDUPLOADDATA	= ( BINDSTATUS_UPLOADINGDATA + 1 ) ,
	BINDSTATUS_PROTOCOLCLASSID	= ( BINDSTATUS_ENDUPLOADDATA + 1 ) ,
	BINDSTATUS_ENCODING	= ( BINDSTATUS_PROTOCOLCLASSID + 1 ) ,
	BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE	= ( BINDSTATUS_ENCODING + 1 ) ,
	BINDSTATUS_CLASSINSTALLLOCATION	= ( BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE + 1 ) ,
	BINDSTATUS_DECODING	= ( BINDSTATUS_CLASSINSTALLLOCATION + 1 ) ,
	BINDSTATUS_LOADINGMIMEHANDLER	= ( BINDSTATUS_DECODING + 1 ) ,
	BINDSTATUS_CONTENTDISPOSITIONATTACH	= ( BINDSTATUS_LOADINGMIMEHANDLER + 1 ) ,
	BINDSTATUS_FILTERREPORTMIMETYPE	= ( BINDSTATUS_CONTENTDISPOSITIONATTACH + 1 ) ,
	BINDSTATUS_CLSIDCANINSTANTIATE	= ( BINDSTATUS_FILTERREPORTMIMETYPE + 1 ) ,
	BINDSTATUS_IUNKNOWNAVAILABLE	= ( BINDSTATUS_CLSIDCANINSTANTIATE + 1 ) ,
	BINDSTATUS_DIRECTBIND	= ( BINDSTATUS_IUNKNOWNAVAILABLE + 1 ) ,
	BINDSTATUS_RAWMIMETYPE	= ( BINDSTATUS_DIRECTBIND + 1 ) ,
	BINDSTATUS_PROXYDETECTING	= ( BINDSTATUS_RAWMIMETYPE + 1 ) ,
	BINDSTATUS_ACCEPTRANGES	= ( BINDSTATUS_PROXYDETECTING + 1 ) ,
	BINDSTATUS_COOKIE_SENT	= ( BINDSTATUS_ACCEPTRANGES + 1 ) ,
	BINDSTATUS_COMPACT_POLICY_RECEIVED	= ( BINDSTATUS_COOKIE_SENT + 1 ) ,
	BINDSTATUS_COOKIE_SUPPRESSED	= ( BINDSTATUS_COMPACT_POLICY_RECEIVED + 1 ) ,
	BINDSTATUS_COOKIE_STATE_UNKNOWN	= ( BINDSTATUS_COOKIE_SUPPRESSED + 1 ) ,
	BINDSTATUS_COOKIE_STATE_ACCEPT	= ( BINDSTATUS_COOKIE_STATE_UNKNOWN + 1 ) ,
	BINDSTATUS_COOKIE_STATE_REJECT	= ( BINDSTATUS_COOKIE_STATE_ACCEPT + 1 ) ,
	BINDSTATUS_COOKIE_STATE_PROMPT	= ( BINDSTATUS_COOKIE_STATE_REJECT + 1 ) ,
	BINDSTATUS_COOKIE_STATE_LEASH	= ( BINDSTATUS_COOKIE_STATE_PROMPT + 1 ) ,
	BINDSTATUS_COOKIE_STATE_DOWNGRADE	= ( BINDSTATUS_COOKIE_STATE_LEASH + 1 ) ,
	BINDSTATUS_POLICY_HREF	= ( BINDSTATUS_COOKIE_STATE_DOWNGRADE + 1 ) ,
	BINDSTATUS_P3P_HEADER	= ( BINDSTATUS_POLICY_HREF + 1 ) ,
	BINDSTATUS_SESSION_COOKIE_RECEIVED	= ( BINDSTATUS_P3P_HEADER + 1 ) ,
	BINDSTATUS_PERSISTENT_COOKIE_RECEIVED	= ( BINDSTATUS_SESSION_COOKIE_RECEIVED + 1 ) ,
	BINDSTATUS_SESSION_COOKIES_ALLOWED	= ( BINDSTATUS_PERSISTENT_COOKIE_RECEIVED + 1 ) ,
	BINDSTATUS_CACHECONTROL	= ( BINDSTATUS_SESSION_COOKIES_ALLOWED + 1 ) ,
	BINDSTATUS_CONTENTDISPOSITIONFILENAME	= ( BINDSTATUS_CACHECONTROL + 1 ) ,
	BINDSTATUS_MIMETEXTPLAINMISMATCH	= ( BINDSTATUS_CONTENTDISPOSITIONFILENAME + 1 ) ,
	BINDSTATUS_PUBLISHERAVAILABLE	= ( BINDSTATUS_MIMETEXTPLAINMISMATCH + 1 ) ,
	BINDSTATUS_DISPLAYNAMEAVAILABLE	= ( BINDSTATUS_PUBLISHERAVAILABLE + 1 ) ,
	BINDSTATUS_SSLUX_NAVBLOCKED	= ( BINDSTATUS_DISPLAYNAMEAVAILABLE + 1 )
    } 	BINDSTATUS;
extern const IID IID_IBindStatusCallback;
    typedef struct IBindStatusCallbackVtbl
    {
        HRESULT (  *QueryInterface )(
            IBindStatusCallback * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBindStatusCallback * This);
        ULONG (  *Release )(
            IBindStatusCallback * This);
        HRESULT (  *OnStartBinding )(
            IBindStatusCallback * This,
             DWORD dwReserved,
              IBinding *pib);
        HRESULT (  *GetPriority )(
            IBindStatusCallback * This,
              LONG *pnPriority);
        HRESULT (  *OnLowResource )(
            IBindStatusCallback * This,
             DWORD reserved);
        HRESULT (  *OnProgress )(
            IBindStatusCallback * This,
             ULONG ulProgress,
             ULONG ulProgressMax,
             ULONG ulStatusCode,
              LPCWSTR szStatusText);
        HRESULT (  *OnStopBinding )(
            IBindStatusCallback * This,
             HRESULT hresult,
              LPCWSTR szError);
         HRESULT (  *GetBindInfo )(
            IBindStatusCallback * This,
             DWORD *grfBINDF,
             BINDINFO *pbindinfo);
         HRESULT (  *OnDataAvailable )(
            IBindStatusCallback * This,
             DWORD grfBSCF,
             DWORD dwSize,
             FORMATETC *pformatetc,
             STGMEDIUM *pstgmed);
        HRESULT (  *OnObjectAvailable )(
            IBindStatusCallback * This,
              const IID * const riid,
              IUnknown *punk);
    } IBindStatusCallbackVtbl;
    struct IBindStatusCallback
    {
         struct IBindStatusCallbackVtbl *lpVtbl;
    };
 HRESULT  IBindStatusCallback_RemoteGetBindInfo_Proxy(
    IBindStatusCallback * This,
      DWORD *grfBINDF,
      RemBINDINFO *pbindinfo,
      RemSTGMEDIUM *pstgmed);
void  IBindStatusCallback_RemoteGetBindInfo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IBindStatusCallback_RemoteOnDataAvailable_Proxy(
    IBindStatusCallback * This,
     DWORD grfBSCF,
     DWORD dwSize,
      RemFORMATETC *pformatetc,
      RemSTGMEDIUM *pstgmed);
void  IBindStatusCallback_RemoteOnDataAvailable_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0005_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0005_v0_0_s_ifspec;
typedef    IAuthenticate *LPAUTHENTICATION;
extern const IID IID_IAuthenticate;
    typedef struct IAuthenticateVtbl
    {
        HRESULT (  *QueryInterface )(
            IAuthenticate * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IAuthenticate * This);
        ULONG (  *Release )(
            IAuthenticate * This);
        HRESULT (  *Authenticate )(
            IAuthenticate * This,
              HWND *phwnd,
              LPWSTR *pszUsername,
              LPWSTR *pszPassword);
    } IAuthenticateVtbl;
    struct IAuthenticate
    {
         struct IAuthenticateVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0006_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0006_v0_0_s_ifspec;
typedef    IHttpNegotiate *LPHTTPNEGOTIATE;
extern const IID IID_IHttpNegotiate;
    typedef struct IHttpNegotiateVtbl
    {
        HRESULT (  *QueryInterface )(
            IHttpNegotiate * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IHttpNegotiate * This);
        ULONG (  *Release )(
            IHttpNegotiate * This);
        HRESULT (  *BeginningTransaction )(
            IHttpNegotiate * This,
              LPCWSTR szURL,
              LPCWSTR szHeaders,
             DWORD dwReserved,
              LPWSTR *pszAdditionalHeaders);
        HRESULT (  *OnResponse )(
            IHttpNegotiate * This,
             DWORD dwResponseCode,
              LPCWSTR szResponseHeaders,
              LPCWSTR szRequestHeaders,
              LPWSTR *pszAdditionalRequestHeaders);
    } IHttpNegotiateVtbl;
    struct IHttpNegotiate
    {
         struct IHttpNegotiateVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0007_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0007_v0_0_s_ifspec;
typedef    IHttpNegotiate2 *LPHTTPNEGOTIATE2;
extern const IID IID_IHttpNegotiate2;
    typedef struct IHttpNegotiate2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IHttpNegotiate2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IHttpNegotiate2 * This);
        ULONG (  *Release )(
            IHttpNegotiate2 * This);
        HRESULT (  *BeginningTransaction )(
            IHttpNegotiate2 * This,
              LPCWSTR szURL,
              LPCWSTR szHeaders,
             DWORD dwReserved,
              LPWSTR *pszAdditionalHeaders);
        HRESULT (  *OnResponse )(
            IHttpNegotiate2 * This,
             DWORD dwResponseCode,
              LPCWSTR szResponseHeaders,
              LPCWSTR szRequestHeaders,
              LPWSTR *pszAdditionalRequestHeaders);
        HRESULT (  *GetRootSecurityId )(
            IHttpNegotiate2 * This,
              BYTE *pbSecurityId,
              DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
    } IHttpNegotiate2Vtbl;
    struct IHttpNegotiate2
    {
         struct IHttpNegotiate2Vtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0008_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0008_v0_0_s_ifspec;
typedef    IWinInetFileStream *LPWININETFILESTREAM;
extern const IID IID_IWinInetFileStream;
    typedef struct IWinInetFileStreamVtbl
    {
        HRESULT (  *QueryInterface )(
            IWinInetFileStream * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWinInetFileStream * This);
        ULONG (  *Release )(
            IWinInetFileStream * This);
        HRESULT (  *SetHandleForUnlock )(
            IWinInetFileStream * This,
             DWORD_PTR hWinInetLockHandle,
             DWORD_PTR dwReserved);
        HRESULT (  *SetDeleteFile )(
            IWinInetFileStream * This,
             DWORD_PTR dwReserved);
    } IWinInetFileStreamVtbl;
    struct IWinInetFileStream
    {
         struct IWinInetFileStreamVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0009_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0009_v0_0_s_ifspec;
typedef  IWindowForBindingUI *LPWINDOWFORBINDINGUI;
extern const IID IID_IWindowForBindingUI;
    typedef struct IWindowForBindingUIVtbl
    {
        HRESULT (  *QueryInterface )(
            IWindowForBindingUI * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWindowForBindingUI * This);
        ULONG (  *Release )(
            IWindowForBindingUI * This);
        HRESULT (  *GetWindow )(
            IWindowForBindingUI * This,
             const GUID * const rguidReason,
             HWND *phwnd);
    } IWindowForBindingUIVtbl;
    struct IWindowForBindingUI
    {
         struct IWindowForBindingUIVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0010_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0010_v0_0_s_ifspec;
typedef  ICodeInstall *LPCODEINSTALL;
typedef
enum __MIDL_ICodeInstall_0001
    {	CIP_DISK_FULL	= 0,
	CIP_ACCESS_DENIED	= ( CIP_DISK_FULL + 1 ) ,
	CIP_NEWER_VERSION_EXISTS	= ( CIP_ACCESS_DENIED + 1 ) ,
	CIP_OLDER_VERSION_EXISTS	= ( CIP_NEWER_VERSION_EXISTS + 1 ) ,
	CIP_NAME_CONFLICT	= ( CIP_OLDER_VERSION_EXISTS + 1 ) ,
	CIP_TRUST_VERIFICATION_COMPONENT_MISSING	= ( CIP_NAME_CONFLICT + 1 ) ,
	CIP_EXE_SELF_REGISTERATION_TIMEOUT	= ( CIP_TRUST_VERIFICATION_COMPONENT_MISSING + 1 ) ,
	CIP_UNSAFE_TO_ABORT	= ( CIP_EXE_SELF_REGISTERATION_TIMEOUT + 1 ) ,
	CIP_NEED_REBOOT	= ( CIP_UNSAFE_TO_ABORT + 1 ) ,
	CIP_NEED_REBOOT_UI_PERMISSION	= ( CIP_NEED_REBOOT + 1 )
    } 	CIP_STATUS;
extern const IID IID_ICodeInstall;
    typedef struct ICodeInstallVtbl
    {
        HRESULT (  *QueryInterface )(
            ICodeInstall * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICodeInstall * This);
        ULONG (  *Release )(
            ICodeInstall * This);
        HRESULT (  *GetWindow )(
            ICodeInstall * This,
             const GUID * const rguidReason,
             HWND *phwnd);
        HRESULT (  *OnCodeInstallProblem )(
            ICodeInstall * This,
             ULONG ulStatusCode,
             LPCWSTR szDestination,
             LPCWSTR szSource,
             DWORD dwReserved);
    } ICodeInstallVtbl;
    struct ICodeInstall
    {
         struct ICodeInstallVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0011_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0011_v0_0_s_ifspec;
typedef
enum __MIDL_IUri_0001
    {	Uri_PROPERTY_ABSOLUTE_URI	= 0,
	Uri_PROPERTY_STRING_START	= Uri_PROPERTY_ABSOLUTE_URI,
	Uri_PROPERTY_AUTHORITY	= ( Uri_PROPERTY_STRING_START + 1 ) ,
	Uri_PROPERTY_DISPLAY_URI	= ( Uri_PROPERTY_AUTHORITY + 1 ) ,
	Uri_PROPERTY_DOMAIN	= ( Uri_PROPERTY_DISPLAY_URI + 1 ) ,
	Uri_PROPERTY_EXTENSION	= ( Uri_PROPERTY_DOMAIN + 1 ) ,
	Uri_PROPERTY_FRAGMENT	= ( Uri_PROPERTY_EXTENSION + 1 ) ,
	Uri_PROPERTY_HOST	= ( Uri_PROPERTY_FRAGMENT + 1 ) ,
	Uri_PROPERTY_PASSWORD	= ( Uri_PROPERTY_HOST + 1 ) ,
	Uri_PROPERTY_PATH	= ( Uri_PROPERTY_PASSWORD + 1 ) ,
	Uri_PROPERTY_PATH_AND_QUERY	= ( Uri_PROPERTY_PATH + 1 ) ,
	Uri_PROPERTY_QUERY	= ( Uri_PROPERTY_PATH_AND_QUERY + 1 ) ,
	Uri_PROPERTY_RAW_URI	= ( Uri_PROPERTY_QUERY + 1 ) ,
	Uri_PROPERTY_SCHEME_NAME	= ( Uri_PROPERTY_RAW_URI + 1 ) ,
	Uri_PROPERTY_USER_INFO	= ( Uri_PROPERTY_SCHEME_NAME + 1 ) ,
	Uri_PROPERTY_USER_NAME	= ( Uri_PROPERTY_USER_INFO + 1 ) ,
	Uri_PROPERTY_STRING_LAST	= Uri_PROPERTY_USER_NAME,
	Uri_PROPERTY_HOST_TYPE	= ( Uri_PROPERTY_STRING_LAST + 1 ) ,
	Uri_PROPERTY_DWORD_START	= Uri_PROPERTY_HOST_TYPE,
	Uri_PROPERTY_PORT	= ( Uri_PROPERTY_DWORD_START + 1 ) ,
	Uri_PROPERTY_SCHEME	= ( Uri_PROPERTY_PORT + 1 ) ,
	Uri_PROPERTY_ZONE	= ( Uri_PROPERTY_SCHEME + 1 ) ,
	Uri_PROPERTY_DWORD_LAST	= Uri_PROPERTY_ZONE
    } 	Uri_PROPERTY;
typedef
enum __MIDL_IUri_0002
    {	Uri_HOST_UNKNOWN	= 0,
	Uri_HOST_DNS	= ( Uri_HOST_UNKNOWN + 1 ) ,
	Uri_HOST_IPV4	= ( Uri_HOST_DNS + 1 ) ,
	Uri_HOST_IPV6	= ( Uri_HOST_IPV4 + 1 ) ,
	Uri_HOST_IDN	= ( Uri_HOST_IPV6 + 1 )
    } 	Uri_HOST_TYPE;
extern const IID IID_IUri;
    typedef struct IUriVtbl
    {
        HRESULT (  *QueryInterface )(
            IUri * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUri * This);
        ULONG (  *Release )(
            IUri * This);
         HRESULT (  *GetPropertyBSTR )(
            IUri * This,
             Uri_PROPERTY uriProp,
              BSTR *pbstrProperty,
             DWORD dwFlags);
         HRESULT (  *GetPropertyLength )(
            IUri * This,
             Uri_PROPERTY uriProp,
              DWORD *pcchProperty,
             DWORD dwFlags);
         HRESULT (  *GetPropertyDWORD )(
            IUri * This,
             Uri_PROPERTY uriProp,
              DWORD *pdwProperty,
             DWORD dwFlags);
         HRESULT (  *HasProperty )(
            IUri * This,
             Uri_PROPERTY uriProp,
              BOOL *pfHasProperty);
         HRESULT (  *GetAbsoluteUri )(
            IUri * This,
              BSTR *pbstrAbsoluteUri);
         HRESULT (  *GetAuthority )(
            IUri * This,
              BSTR *pbstrAuthority);
         HRESULT (  *GetDisplayUri )(
            IUri * This,
              BSTR *pbstrDisplayString);
         HRESULT (  *GetDomain )(
            IUri * This,
              BSTR *pbstrDomain);
         HRESULT (  *GetExtension )(
            IUri * This,
              BSTR *pbstrExtension);
         HRESULT (  *GetFragment )(
            IUri * This,
              BSTR *pbstrFragment);
         HRESULT (  *GetHost )(
            IUri * This,
              BSTR *pbstrHost);
         HRESULT (  *GetPassword )(
            IUri * This,
              BSTR *pbstrPassword);
         HRESULT (  *GetPath )(
            IUri * This,
              BSTR *pbstrPath);
         HRESULT (  *GetPathAndQuery )(
            IUri * This,
              BSTR *pbstrPathAndQuery);
         HRESULT (  *GetQuery )(
            IUri * This,
              BSTR *pbstrQuery);
         HRESULT (  *GetRawUri )(
            IUri * This,
              BSTR *pbstrRawUri);
         HRESULT (  *GetSchemeName )(
            IUri * This,
              BSTR *pbstrSchemeName);
         HRESULT (  *GetUserInfo )(
            IUri * This,
              BSTR *pbstrUserInfo);
         HRESULT (  *GetUserNameA )(
            IUri * This,
              BSTR *pbstrUserName);
         HRESULT (  *GetHostType )(
            IUri * This,
              DWORD *pdwHostType);
         HRESULT (  *GetPort )(
            IUri * This,
              DWORD *pdwPort);
         HRESULT (  *GetScheme )(
            IUri * This,
              DWORD *pdwScheme);
         HRESULT (  *GetZone )(
            IUri * This,
              DWORD *pdwZone);
         HRESULT (  *GetProperties )(
            IUri * This,
              LPDWORD pdwFlags);
         HRESULT (  *IsEqual )(
            IUri * This,
              IUri *pUri,
              BOOL *pfEqual);
    } IUriVtbl;
    struct IUri
    {
         struct IUriVtbl *lpVtbl;
    };
extern HRESULT  CreateUri( LPCWSTR pwzURI,
                  DWORD dwFlags,
                   DWORD_PTR dwReserved,
                  IUri** ppURI);
extern HRESULT  CreateUriWithFragment(
                  LPCWSTR pwzURI,
                  LPCWSTR pwzFragment,
                  DWORD dwFlags,
                   DWORD_PTR dwReserved,
                  IUri** ppURI);
extern HRESULT  CreateUriFromMultiByteString(
           LPCSTR    pszANSIInputUri,
               DWORD     dwEncodingFlags,
               DWORD     dwCodePage,
               DWORD     dwCreateFlags,
     DWORD_PTR dwReserved,
          IUri**    ppUri);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0012_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0012_v0_0_s_ifspec;
extern const IID IID_IUriContainer;
    typedef struct IUriContainerVtbl
    {
        HRESULT (  *QueryInterface )(
            IUriContainer * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUriContainer * This);
        ULONG (  *Release )(
            IUriContainer * This);
         HRESULT (  *GetIUri )(
            IUriContainer * This,
             IUri **ppIUri);
    } IUriContainerVtbl;
    struct IUriContainer
    {
         struct IUriContainerVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0013_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0013_v0_0_s_ifspec;
extern const IID IID_IUriBuilder;
    typedef struct IUriBuilderVtbl
    {
        HRESULT (  *QueryInterface )(
            IUriBuilder * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUriBuilder * This);
        ULONG (  *Release )(
            IUriBuilder * This);
         HRESULT (  *CreateUriSimple )(
            IUriBuilder * This,
             DWORD dwAllowEncodingPropertyMask,
             DWORD_PTR dwReserved,
              IUri **ppIUri);
         HRESULT (  *CreateUri )(
            IUriBuilder * This,
             DWORD dwCreateFlags,
             DWORD dwAllowEncodingPropertyMask,
             DWORD_PTR dwReserved,
              IUri **ppIUri);
         HRESULT (  *CreateUriWithFlags )(
            IUriBuilder * This,
             DWORD dwCreateFlags,
             DWORD dwUriBuilderFlags,
             DWORD dwAllowEncodingPropertyMask,
             DWORD_PTR dwReserved,
              IUri **ppIUri);
         HRESULT (  *GetIUri )(
            IUriBuilder * This,
              IUri **ppIUri);
         HRESULT (  *SetIUri )(
            IUriBuilder * This,
              IUri *pIUri);
         HRESULT (  *GetFragment )(
            IUriBuilder * This,
              DWORD *pcchFragment,
              LPCWSTR *ppwzFragment);
         HRESULT (  *GetHost )(
            IUriBuilder * This,
              DWORD *pcchHost,
              LPCWSTR *ppwzHost);
         HRESULT (  *GetPassword )(
            IUriBuilder * This,
              DWORD *pcchPassword,
              LPCWSTR *ppwzPassword);
         HRESULT (  *GetPath )(
            IUriBuilder * This,
              DWORD *pcchPath,
              LPCWSTR *ppwzPath);
         HRESULT (  *GetPort )(
            IUriBuilder * This,
              BOOL *pfHasPort,
              DWORD *pdwPort);
         HRESULT (  *GetQuery )(
            IUriBuilder * This,
              DWORD *pcchQuery,
              LPCWSTR *ppwzQuery);
         HRESULT (  *GetSchemeName )(
            IUriBuilder * This,
              DWORD *pcchSchemeName,
              LPCWSTR *ppwzSchemeName);
         HRESULT (  *GetUserNameA )(
            IUriBuilder * This,
              DWORD *pcchUserName,
              LPCWSTR *ppwzUserName);
         HRESULT (  *SetFragment )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetHost )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetPassword )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetPath )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetPortA )(
            IUriBuilder * This,
             BOOL fHasPort,
             DWORD dwNewValue);
         HRESULT (  *SetQuery )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetSchemeName )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *SetUserName )(
            IUriBuilder * This,
              LPCWSTR pwzNewValue);
         HRESULT (  *RemoveProperties )(
            IUriBuilder * This,
             DWORD dwPropertyMask);
         HRESULT (  *HasBeenModified )(
            IUriBuilder * This,
              BOOL *pfModified);
    } IUriBuilderVtbl;
    struct IUriBuilder
    {
         struct IUriBuilderVtbl *lpVtbl;
    };
extern const IID IID_IUriBuilderFactory;
    typedef struct IUriBuilderFactoryVtbl
    {
        HRESULT (  *QueryInterface )(
            IUriBuilderFactory * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IUriBuilderFactory * This);
        ULONG (  *Release )(
            IUriBuilderFactory * This);
         HRESULT (  *CreateIUriBuilder )(
            IUriBuilderFactory * This,
              DWORD dwFlags,
              DWORD_PTR dwReserved,
              IUriBuilder **ppIUriBuilder);
         HRESULT (  *CreateInitializedIUriBuilder )(
            IUriBuilderFactory * This,
              DWORD dwFlags,
              DWORD_PTR dwReserved,
              IUriBuilder **ppIUriBuilder);
    } IUriBuilderFactoryVtbl;
    struct IUriBuilderFactory
    {
         struct IUriBuilderFactoryVtbl *lpVtbl;
    };
extern HRESULT  CreateIUriBuilder(
        IUri         *pIUri,
            DWORD         dwFlags,
            DWORD_PTR     dwReserved,
     IUriBuilder **ppIUriBuilder
    );
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0015_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0015_v0_0_s_ifspec;
typedef    IWinInetInfo *LPWININETINFO;
extern const IID IID_IWinInetInfo;
    typedef struct IWinInetInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IWinInetInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWinInetInfo * This);
        ULONG (  *Release )(
            IWinInetInfo * This);
         HRESULT (  *QueryOption )(
            IWinInetInfo * This,
             DWORD dwOption,
             LPVOID pBuffer,
             DWORD *pcbBuf);
    } IWinInetInfoVtbl;
    struct IWinInetInfo
    {
         struct IWinInetInfoVtbl *lpVtbl;
    };
 HRESULT  IWinInetInfo_RemoteQueryOption_Proxy(
    IWinInetInfo * This,
     DWORD dwOption,
      BYTE *pBuffer,
      DWORD *pcbBuf);
void  IWinInetInfo_RemoteQueryOption_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0016_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0016_v0_0_s_ifspec;
typedef  IHttpSecurity *LPHTTPSECURITY;
extern const IID IID_IHttpSecurity;
    typedef struct IHttpSecurityVtbl
    {
        HRESULT (  *QueryInterface )(
            IHttpSecurity * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IHttpSecurity * This);
        ULONG (  *Release )(
            IHttpSecurity * This);
        HRESULT (  *GetWindow )(
            IHttpSecurity * This,
             const GUID * const rguidReason,
             HWND *phwnd);
        HRESULT (  *OnSecurityProblem )(
            IHttpSecurity * This,
             DWORD dwProblem);
    } IHttpSecurityVtbl;
    struct IHttpSecurity
    {
         struct IHttpSecurityVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0017_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0017_v0_0_s_ifspec;
typedef    IWinInetHttpInfo *LPWININETHTTPINFO;
extern const IID IID_IWinInetHttpInfo;
    typedef struct IWinInetHttpInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IWinInetHttpInfo * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWinInetHttpInfo * This);
        ULONG (  *Release )(
            IWinInetHttpInfo * This);
         HRESULT (  *QueryOption )(
            IWinInetHttpInfo * This,
             DWORD dwOption,
             LPVOID pBuffer,
             DWORD *pcbBuf);
         HRESULT (  *QueryInfo )(
            IWinInetHttpInfo * This,
             DWORD dwOption,
             LPVOID pBuffer,
             DWORD *pcbBuf,
             DWORD *pdwFlags,
             DWORD *pdwReserved);
    } IWinInetHttpInfoVtbl;
    struct IWinInetHttpInfo
    {
         struct IWinInetHttpInfoVtbl *lpVtbl;
    };
 HRESULT  IWinInetHttpInfo_RemoteQueryInfo_Proxy(
    IWinInetHttpInfo * This,
     DWORD dwOption,
      BYTE *pBuffer,
      DWORD *pcbBuf,
      DWORD *pdwFlags,
      DWORD *pdwReserved);
void  IWinInetHttpInfo_RemoteQueryInfo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0018_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0018_v0_0_s_ifspec;
typedef  IWinInetCacheHints *LPWININETCACHEHINTS;
extern const IID IID_IWinInetCacheHints;
    typedef struct IWinInetCacheHintsVtbl
    {
        HRESULT (  *QueryInterface )(
            IWinInetCacheHints * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWinInetCacheHints * This);
        ULONG (  *Release )(
            IWinInetCacheHints * This);
        HRESULT (  *SetCacheExtension )(
            IWinInetCacheHints * This,
             LPCWSTR pwzExt,
             LPVOID pszCacheFile,
             DWORD *pcbCacheFile,
             DWORD *pdwWinInetError,
             DWORD *pdwReserved);
    } IWinInetCacheHintsVtbl;
    struct IWinInetCacheHints
    {
         struct IWinInetCacheHintsVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0019_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0019_v0_0_s_ifspec;
typedef  IWinInetCacheHints2 *LPWININETCACHEHINTS2;
extern const IID IID_IWinInetCacheHints2;
    typedef struct IWinInetCacheHints2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IWinInetCacheHints2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWinInetCacheHints2 * This);
        ULONG (  *Release )(
            IWinInetCacheHints2 * This);
        HRESULT (  *SetCacheExtension )(
            IWinInetCacheHints2 * This,
             LPCWSTR pwzExt,
             LPVOID pszCacheFile,
             DWORD *pcbCacheFile,
             DWORD *pdwWinInetError,
             DWORD *pdwReserved);
        HRESULT (  *SetCacheExtension2 )(
            IWinInetCacheHints2 * This,
             LPCWSTR pwzExt,
             WCHAR *pwzCacheFile,
             DWORD *pcchCacheFile,
             DWORD *pdwWinInetError,
             DWORD *pdwReserved);
    } IWinInetCacheHints2Vtbl;
    struct IWinInetCacheHints2
    {
         struct IWinInetCacheHints2Vtbl *lpVtbl;
    };
extern const GUID SID_BindHost;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0020_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0020_v0_0_s_ifspec;
typedef    IBindHost *LPBINDHOST;
extern const IID IID_IBindHost;
    typedef struct IBindHostVtbl
    {
        HRESULT (  *QueryInterface )(
            IBindHost * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IBindHost * This);
        ULONG (  *Release )(
            IBindHost * This);
        HRESULT (  *CreateMoniker )(
            IBindHost * This,
              LPOLESTR szName,
              IBindCtx *pBC,
              IMoniker **ppmk,
             DWORD dwReserved);
         HRESULT (  *MonikerBindToStorage )(
            IBindHost * This,
             IMoniker *pMk,
             IBindCtx *pBC,
             IBindStatusCallback *pBSC,
             const IID * const riid,
             void **ppvObj);
         HRESULT (  *MonikerBindToObject )(
            IBindHost * This,
             IMoniker *pMk,
             IBindCtx *pBC,
             IBindStatusCallback *pBSC,
             const IID * const riid,
             void **ppvObj);
    } IBindHostVtbl;
    struct IBindHost
    {
         struct IBindHostVtbl *lpVtbl;
    };
 HRESULT  IBindHost_RemoteMonikerBindToStorage_Proxy(
    IBindHost * This,
      IMoniker *pMk,
      IBindCtx *pBC,
      IBindStatusCallback *pBSC,
      const IID * const riid,
      IUnknown **ppvObj);
void  IBindHost_RemoteMonikerBindToStorage_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
 HRESULT  IBindHost_RemoteMonikerBindToObject_Proxy(
    IBindHost * This,
      IMoniker *pMk,
      IBindCtx *pBC,
      IBindStatusCallback *pBSC,
      const IID * const riid,
      IUnknown **ppvObj);
void  IBindHost_RemoteMonikerBindToObject_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
struct IBindStatusCallback;
extern HRESULT  HlinkSimpleNavigateToString(
     LPCWSTR szTarget,
     LPCWSTR szLocation,
     LPCWSTR szTargetFrameName,
     IUnknown *pUnk,
     IBindCtx *pbc,
     IBindStatusCallback *,
     DWORD grfHLNF,
     DWORD dwReserved
);
extern HRESULT  HlinkSimpleNavigateToMoniker(
     IMoniker *pmkTarget,
     LPCWSTR szLocation,
     LPCWSTR szTargetFrameName,
     IUnknown *pUnk,
     IBindCtx *pbc,
     IBindStatusCallback *,
     DWORD grfHLNF,
     DWORD dwReserved
);
extern HRESULT  URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLDownloadToCacheFileA( LPUNKNOWN,  LPCSTR,   LPSTR,  DWORD cchFileName, DWORD,  LPBINDSTATUSCALLBACK);
extern HRESULT  URLDownloadToCacheFileW( LPUNKNOWN,  LPCWSTR,  LPWSTR, DWORD cchFileName, DWORD,  LPBINDSTATUSCALLBACK);
extern HRESULT  URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
extern HRESULT  HlinkGoBack(IUnknown *pUnk);
extern HRESULT  HlinkGoForward(IUnknown *pUnk);
extern HRESULT  HlinkNavigateString(IUnknown *pUnk, LPCWSTR szTarget);
extern HRESULT  HlinkNavigateMoniker(IUnknown *pUnk, IMoniker *pmkTarget);
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0021_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0021_v0_0_s_ifspec;
typedef  IInternet *LPIINTERNET;
extern const IID IID_IInternet;
    typedef struct IInternetVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternet * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternet * This);
        ULONG (  *Release )(
            IInternet * This);
    } IInternetVtbl;
    struct IInternet
    {
         struct IInternetVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0022_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0022_v0_0_s_ifspec;
typedef  IInternetBindInfo *LPIINTERNETBINDINFO;
typedef
enum tagBINDSTRING
    {	BINDSTRING_HEADERS	= 1,
	BINDSTRING_ACCEPT_MIMES	= ( BINDSTRING_HEADERS + 1 ) ,
	BINDSTRING_EXTRA_URL	= ( BINDSTRING_ACCEPT_MIMES + 1 ) ,
	BINDSTRING_LANGUAGE	= ( BINDSTRING_EXTRA_URL + 1 ) ,
	BINDSTRING_USERNAME	= ( BINDSTRING_LANGUAGE + 1 ) ,
	BINDSTRING_PASSWORD	= ( BINDSTRING_USERNAME + 1 ) ,
	BINDSTRING_UA_PIXELS	= ( BINDSTRING_PASSWORD + 1 ) ,
	BINDSTRING_UA_COLOR	= ( BINDSTRING_UA_PIXELS + 1 ) ,
	BINDSTRING_OS	= ( BINDSTRING_UA_COLOR + 1 ) ,
	BINDSTRING_USER_AGENT	= ( BINDSTRING_OS + 1 ) ,
	BINDSTRING_ACCEPT_ENCODINGS	= ( BINDSTRING_USER_AGENT + 1 ) ,
	BINDSTRING_POST_COOKIE	= ( BINDSTRING_ACCEPT_ENCODINGS + 1 ) ,
	BINDSTRING_POST_DATA_MIME	= ( BINDSTRING_POST_COOKIE + 1 ) ,
	BINDSTRING_URL	= ( BINDSTRING_POST_DATA_MIME + 1 ) ,
	BINDSTRING_IID	= ( BINDSTRING_URL + 1 ) ,
	BINDSTRING_FLAG_BIND_TO_OBJECT	= ( BINDSTRING_IID + 1 ) ,
	BINDSTRING_PTR_BIND_CONTEXT	= ( BINDSTRING_FLAG_BIND_TO_OBJECT + 1 )
    } 	BINDSTRING;
extern const IID IID_IInternetBindInfo;
    typedef struct IInternetBindInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetBindInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetBindInfo * This);
        ULONG (  *Release )(
            IInternetBindInfo * This);
        HRESULT (  *GetBindInfo )(
            IInternetBindInfo * This,
             DWORD *grfBINDF,
             BINDINFO *pbindinfo);
        HRESULT (  *GetBindString )(
            IInternetBindInfo * This,
             ULONG ulStringType,
             LPOLESTR *ppwzStr,
             ULONG cEl,
             ULONG *pcElFetched);
    } IInternetBindInfoVtbl;
    struct IInternetBindInfo
    {
         struct IInternetBindInfoVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0023_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0023_v0_0_s_ifspec;
typedef  IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
typedef
enum _tagPI_FLAGS
    {	PI_PARSE_URL	= 0x1,
	PI_FILTER_MODE	= 0x2,
	PI_FORCE_ASYNC	= 0x4,
	PI_USE_WORKERTHREAD	= 0x8,
	PI_MIMEVERIFICATION	= 0x10,
	PI_CLSIDLOOKUP	= 0x20,
	PI_DATAPROGRESS	= 0x40,
	PI_SYNCHRONOUS	= 0x80,
	PI_APARTMENTTHREADED	= 0x100,
	PI_CLASSINSTALL	= 0x200,
	PI_PASSONBINDCTX	= 0x2000,
	PI_NOMIMEHANDLER	= 0x8000,
	PI_LOADAPPDIRECT	= 0x4000,
	PD_FORCE_SWITCH	= 0x10000,
	PI_PREFERDEFAULTHANDLER	= 0x20000
    } 	PI_FLAGS;
typedef struct _tagPROTOCOLDATA
    {
    DWORD grfFlags;
    DWORD dwState;
    LPVOID pData;
    ULONG cbData;
    } 	PROTOCOLDATA;
typedef struct _tagStartParam
    {
    IID iid;
    IBindCtx *pIBindCtx;
    IUnknown *pItf;
    } 	StartParam;
extern const IID IID_IInternetProtocolRoot;
    typedef struct IInternetProtocolRootVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocolRoot * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocolRoot * This);
        ULONG (  *Release )(
            IInternetProtocolRoot * This);
        HRESULT (  *Start )(
            IInternetProtocolRoot * This,
             LPCWSTR szUrl,
             IInternetProtocolSink *pOIProtSink,
             IInternetBindInfo *pOIBindInfo,
             DWORD grfPI,
             HANDLE_PTR dwReserved);
        HRESULT (  *Continue )(
            IInternetProtocolRoot * This,
             PROTOCOLDATA *pProtocolData);
        HRESULT (  *Abort )(
            IInternetProtocolRoot * This,
             HRESULT hrReason,
             DWORD dwOptions);
        HRESULT (  *Terminate )(
            IInternetProtocolRoot * This,
             DWORD dwOptions);
        HRESULT (  *Suspend )(
            IInternetProtocolRoot * This);
        HRESULT (  *Resume )(
            IInternetProtocolRoot * This);
    } IInternetProtocolRootVtbl;
    struct IInternetProtocolRoot
    {
         struct IInternetProtocolRootVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0024_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0024_v0_0_s_ifspec;
typedef  IInternetProtocol *LPIINTERNETPROTOCOL;
extern const IID IID_IInternetProtocol;
    typedef struct IInternetProtocolVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocol * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocol * This);
        ULONG (  *Release )(
            IInternetProtocol * This);
        HRESULT (  *Start )(
            IInternetProtocol * This,
             LPCWSTR szUrl,
             IInternetProtocolSink *pOIProtSink,
             IInternetBindInfo *pOIBindInfo,
             DWORD grfPI,
             HANDLE_PTR dwReserved);
        HRESULT (  *Continue )(
            IInternetProtocol * This,
             PROTOCOLDATA *pProtocolData);
        HRESULT (  *Abort )(
            IInternetProtocol * This,
             HRESULT hrReason,
             DWORD dwOptions);
        HRESULT (  *Terminate )(
            IInternetProtocol * This,
             DWORD dwOptions);
        HRESULT (  *Suspend )(
            IInternetProtocol * This);
        HRESULT (  *Resume )(
            IInternetProtocol * This);
        HRESULT (  *Read )(
            IInternetProtocol * This,
             void *pv,
             ULONG cb,
             ULONG *pcbRead);
        HRESULT (  *Seek )(
            IInternetProtocol * This,
             LARGE_INTEGER dlibMove,
             DWORD dwOrigin,
             ULARGE_INTEGER *plibNewPosition);
        HRESULT (  *LockRequest )(
            IInternetProtocol * This,
             DWORD dwOptions);
        HRESULT (  *UnlockRequest )(
            IInternetProtocol * This);
    } IInternetProtocolVtbl;
    struct IInternetProtocol
    {
         struct IInternetProtocolVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0025_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0025_v0_0_s_ifspec;
extern const IID IID_IInternetProtocolEx;
    typedef struct IInternetProtocolExVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocolEx * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocolEx * This);
        ULONG (  *Release )(
            IInternetProtocolEx * This);
        HRESULT (  *Start )(
            IInternetProtocolEx * This,
             LPCWSTR szUrl,
             IInternetProtocolSink *pOIProtSink,
             IInternetBindInfo *pOIBindInfo,
             DWORD grfPI,
             HANDLE_PTR dwReserved);
        HRESULT (  *Continue )(
            IInternetProtocolEx * This,
             PROTOCOLDATA *pProtocolData);
        HRESULT (  *Abort )(
            IInternetProtocolEx * This,
             HRESULT hrReason,
             DWORD dwOptions);
        HRESULT (  *Terminate )(
            IInternetProtocolEx * This,
             DWORD dwOptions);
        HRESULT (  *Suspend )(
            IInternetProtocolEx * This);
        HRESULT (  *Resume )(
            IInternetProtocolEx * This);
        HRESULT (  *Read )(
            IInternetProtocolEx * This,
             void *pv,
             ULONG cb,
             ULONG *pcbRead);
        HRESULT (  *Seek )(
            IInternetProtocolEx * This,
             LARGE_INTEGER dlibMove,
             DWORD dwOrigin,
             ULARGE_INTEGER *plibNewPosition);
        HRESULT (  *LockRequest )(
            IInternetProtocolEx * This,
             DWORD dwOptions);
        HRESULT (  *UnlockRequest )(
            IInternetProtocolEx * This);
        HRESULT (  *StartEx )(
            IInternetProtocolEx * This,
             IUri *pUri,
             IInternetProtocolSink *pOIProtSink,
             IInternetBindInfo *pOIBindInfo,
             DWORD grfPI,
             HANDLE_PTR dwReserved);
    } IInternetProtocolExVtbl;
    struct IInternetProtocolEx
    {
         struct IInternetProtocolExVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0026_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0026_v0_0_s_ifspec;
typedef  IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
extern const IID IID_IInternetProtocolSink;
    typedef struct IInternetProtocolSinkVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocolSink * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocolSink * This);
        ULONG (  *Release )(
            IInternetProtocolSink * This);
        HRESULT (  *Switch )(
            IInternetProtocolSink * This,
             PROTOCOLDATA *pProtocolData);
        HRESULT (  *ReportProgress )(
            IInternetProtocolSink * This,
             ULONG ulStatusCode,
             LPCWSTR szStatusText);
        HRESULT (  *ReportData )(
            IInternetProtocolSink * This,
             DWORD grfBSCF,
             ULONG ulProgress,
             ULONG ulProgressMax);
        HRESULT (  *ReportResult )(
            IInternetProtocolSink * This,
             HRESULT hrResult,
             DWORD dwError,
             LPCWSTR szResult);
    } IInternetProtocolSinkVtbl;
    struct IInternetProtocolSink
    {
         struct IInternetProtocolSinkVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0027_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0027_v0_0_s_ifspec;
typedef  IInternetProtocolSinkStackable *LPIINTERNETPROTOCOLSINKStackable;
extern const IID IID_IInternetProtocolSinkStackable;
    typedef struct IInternetProtocolSinkStackableVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocolSinkStackable * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocolSinkStackable * This);
        ULONG (  *Release )(
            IInternetProtocolSinkStackable * This);
        HRESULT (  *SwitchSink )(
            IInternetProtocolSinkStackable * This,
             IInternetProtocolSink *pOIProtSink);
        HRESULT (  *CommitSwitch )(
            IInternetProtocolSinkStackable * This);
        HRESULT (  *RollbackSwitch )(
            IInternetProtocolSinkStackable * This);
    } IInternetProtocolSinkStackableVtbl;
    struct IInternetProtocolSinkStackable
    {
         struct IInternetProtocolSinkStackableVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0028_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0028_v0_0_s_ifspec;
typedef  IInternetSession *LPIINTERNETSESSION;
typedef
enum _tagOIBDG_FLAGS
    {	OIBDG_APARTMENTTHREADED	= 0x100,
	OIBDG_DATAONLY	= 0x1000
    } 	OIBDG_FLAGS;
extern const IID IID_IInternetSession;
    typedef struct IInternetSessionVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetSession * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetSession * This);
        ULONG (  *Release )(
            IInternetSession * This);
        HRESULT (  *RegisterNameSpace )(
            IInternetSession * This,
             IClassFactory *pCF,
             const IID * const rclsid,
             LPCWSTR pwzProtocol,
             ULONG cPatterns,
             const LPCWSTR *ppwzPatterns,
             DWORD dwReserved);
        HRESULT (  *UnregisterNameSpace )(
            IInternetSession * This,
             IClassFactory *pCF,
             LPCWSTR pszProtocol);
        HRESULT (  *RegisterMimeFilter )(
            IInternetSession * This,
             IClassFactory *pCF,
             const IID * const rclsid,
             LPCWSTR pwzType);
        HRESULT (  *UnregisterMimeFilter )(
            IInternetSession * This,
             IClassFactory *pCF,
             LPCWSTR pwzType);
        HRESULT (  *CreateBinding )(
            IInternetSession * This,
             LPBC pBC,
             LPCWSTR szUrl,
             IUnknown *pUnkOuter,
             IUnknown **ppUnk,
             IInternetProtocol **ppOInetProt,
             DWORD dwOption);
        HRESULT (  *SetSessionOption )(
            IInternetSession * This,
             DWORD dwOption,
             LPVOID pBuffer,
             DWORD dwBufferLength,
             DWORD dwReserved);
        HRESULT (  *GetSessionOption )(
            IInternetSession * This,
             DWORD dwOption,
             LPVOID pBuffer,
             DWORD *pdwBufferLength,
             DWORD dwReserved);
    } IInternetSessionVtbl;
    struct IInternetSession
    {
         struct IInternetSessionVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0029_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0029_v0_0_s_ifspec;
typedef  IInternetThreadSwitch *LPIINTERNETTHREADSWITCH;
extern const IID IID_IInternetThreadSwitch;
    typedef struct IInternetThreadSwitchVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetThreadSwitch * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetThreadSwitch * This);
        ULONG (  *Release )(
            IInternetThreadSwitch * This);
        HRESULT (  *Prepare )(
            IInternetThreadSwitch * This);
        HRESULT (  *Continue )(
            IInternetThreadSwitch * This);
    } IInternetThreadSwitchVtbl;
    struct IInternetThreadSwitch
    {
         struct IInternetThreadSwitchVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0030_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0030_v0_0_s_ifspec;
typedef  IInternetPriority *LPIINTERNETPRIORITY;
extern const IID IID_IInternetPriority;
    typedef struct IInternetPriorityVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetPriority * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetPriority * This);
        ULONG (  *Release )(
            IInternetPriority * This);
        HRESULT (  *SetPriority )(
            IInternetPriority * This,
             LONG nPriority);
        HRESULT (  *GetPriority )(
            IInternetPriority * This,
             LONG *pnPriority);
    } IInternetPriorityVtbl;
    struct IInternetPriority
    {
         struct IInternetPriorityVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0031_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0031_v0_0_s_ifspec;
typedef  IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
typedef
enum _tagPARSEACTION
    {	PARSE_CANONICALIZE	= 1,
	PARSE_FRIENDLY	= ( PARSE_CANONICALIZE + 1 ) ,
	PARSE_SECURITY_URL	= ( PARSE_FRIENDLY + 1 ) ,
	PARSE_ROOTDOCUMENT	= ( PARSE_SECURITY_URL + 1 ) ,
	PARSE_DOCUMENT	= ( PARSE_ROOTDOCUMENT + 1 ) ,
	PARSE_ANCHOR	= ( PARSE_DOCUMENT + 1 ) ,
	PARSE_ENCODE	= ( PARSE_ANCHOR + 1 ) ,
	PARSE_DECODE	= ( PARSE_ENCODE + 1 ) ,
	PARSE_PATH_FROM_URL	= ( PARSE_DECODE + 1 ) ,
	PARSE_URL_FROM_PATH	= ( PARSE_PATH_FROM_URL + 1 ) ,
	PARSE_MIME	= ( PARSE_URL_FROM_PATH + 1 ) ,
	PARSE_SERVER	= ( PARSE_MIME + 1 ) ,
	PARSE_SCHEMA	= ( PARSE_SERVER + 1 ) ,
	PARSE_SITE	= ( PARSE_SCHEMA + 1 ) ,
	PARSE_DOMAIN	= ( PARSE_SITE + 1 ) ,
	PARSE_LOCATION	= ( PARSE_DOMAIN + 1 ) ,
	PARSE_SECURITY_DOMAIN	= ( PARSE_LOCATION + 1 ) ,
	PARSE_ESCAPE	= ( PARSE_SECURITY_DOMAIN + 1 ) ,
	PARSE_UNESCAPE	= ( PARSE_ESCAPE + 1 )
    } 	PARSEACTION;
typedef
enum _tagPSUACTION
    {	PSU_DEFAULT	= 1,
	PSU_SECURITY_URL_ONLY	= ( PSU_DEFAULT + 1 )
    } 	PSUACTION;
typedef
enum _tagQUERYOPTION
    {	QUERY_EXPIRATION_DATE	= 1,
	QUERY_TIME_OF_LAST_CHANGE	= ( QUERY_EXPIRATION_DATE + 1 ) ,
	QUERY_CONTENT_ENCODING	= ( QUERY_TIME_OF_LAST_CHANGE + 1 ) ,
	QUERY_CONTENT_TYPE	= ( QUERY_CONTENT_ENCODING + 1 ) ,
	QUERY_REFRESH	= ( QUERY_CONTENT_TYPE + 1 ) ,
	QUERY_RECOMBINE	= ( QUERY_REFRESH + 1 ) ,
	QUERY_CAN_NAVIGATE	= ( QUERY_RECOMBINE + 1 ) ,
	QUERY_USES_NETWORK	= ( QUERY_CAN_NAVIGATE + 1 ) ,
	QUERY_IS_CACHED	= ( QUERY_USES_NETWORK + 1 ) ,
	QUERY_IS_INSTALLEDENTRY	= ( QUERY_IS_CACHED + 1 ) ,
	QUERY_IS_CACHED_OR_MAPPED	= ( QUERY_IS_INSTALLEDENTRY + 1 ) ,
	QUERY_USES_CACHE	= ( QUERY_IS_CACHED_OR_MAPPED + 1 ) ,
	QUERY_IS_SECURE	= ( QUERY_USES_CACHE + 1 ) ,
	QUERY_IS_SAFE	= ( QUERY_IS_SECURE + 1 ) ,
	QUERY_USES_HISTORYFOLDER	= ( QUERY_IS_SAFE + 1 )
    } 	QUERYOPTION;
extern const IID IID_IInternetProtocolInfo;
    typedef struct IInternetProtocolInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetProtocolInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetProtocolInfo * This);
        ULONG (  *Release )(
            IInternetProtocolInfo * This);
        HRESULT (  *ParseUrl )(
            IInternetProtocolInfo * This,
             LPCWSTR pwzUrl,
             PARSEACTION ParseAction,
             DWORD dwParseFlags,
             LPWSTR pwzResult,
             DWORD cchResult,
             DWORD *pcchResult,
             DWORD dwReserved);
        HRESULT (  *CombineUrl )(
            IInternetProtocolInfo * This,
             LPCWSTR pwzBaseUrl,
             LPCWSTR pwzRelativeUrl,
             DWORD dwCombineFlags,
             LPWSTR pwzResult,
             DWORD cchResult,
             DWORD *pcchResult,
             DWORD dwReserved);
        HRESULT (  *CompareUrl )(
            IInternetProtocolInfo * This,
             LPCWSTR pwzUrl1,
             LPCWSTR pwzUrl2,
             DWORD dwCompareFlags);
        HRESULT (  *QueryInfo )(
            IInternetProtocolInfo * This,
             LPCWSTR pwzUrl,
             QUERYOPTION OueryOption,
             DWORD dwQueryFlags,
             LPVOID pBuffer,
             DWORD cbBuffer,
             DWORD *pcbBuf,
             DWORD dwReserved);
    } IInternetProtocolInfoVtbl;
    struct IInternetProtocolInfo
    {
         struct IInternetProtocolInfoVtbl *lpVtbl;
    };
extern HRESULT  CoInternetParseUrl(
                            LPCWSTR      pwzUrl,
                            PARSEACTION  ParseAction,
                            DWORD        dwFlags,
     LPWSTR       pszResult,
                            DWORD        cchResult,
                       DWORD       *pcchResult,
                            DWORD        dwReserved
    );
extern HRESULT  CoInternetParseIUri(
                        IUri        *pIUri,
                            PARSEACTION  ParseAction,
                            DWORD        dwFlags,
     LPWSTR       pwzResult,
                            DWORD        cchResult,
                       DWORD       *pcchResult,
                            DWORD_PTR    dwReserved
    );
extern HRESULT  CoInternetCombineUrl(
                                               LPCWSTR   pwzBaseUrl,
                                               LPCWSTR   pwzRelativeUrl,
                                               DWORD     dwCombineFlags,
     LPWSTR    pszResult,
                                               DWORD     cchResult,
                                      DWORD     *pcchResult,
                                     DWORD     dwReserved
    );
extern HRESULT  CoInternetCombineUrlEx(
        IUri       *pBaseUri,
        LPCWSTR     pwzRelativeUrl,
                DWORD       dwCombineFlags,
     IUri      **ppCombinedUri,
        DWORD_PTR   dwReserved
    );
extern HRESULT  CoInternetCombineIUri (
            IUri       *pBaseUri,
            IUri       *pRelativeUri,
                DWORD       dwCombineFlags,
     IUri      **ppCombinedUri,
        DWORD_PTR   dwReserved
    );
extern HRESULT  CoInternetCompareUrl(
    LPCWSTR pwzUrl1,
    LPCWSTR pwzUrl2,
    DWORD dwFlags
    );
extern HRESULT  CoInternetGetProtocolFlags(
    LPCWSTR     pwzUrl,
    DWORD      *pdwFlags,
    DWORD       dwReserved
    );
extern HRESULT  CoInternetQueryInfo(
    LPCWSTR     pwzUrl,
    QUERYOPTION QueryOptions,
    DWORD       dwQueryFlags,
    LPVOID      pvBuffer,
    DWORD       cbBuffer,
    DWORD      *pcbBuffer,
    DWORD       dwReserved
    );
extern HRESULT  CoInternetGetSession(
    DWORD       dwSessionMode,
     IInternetSession **ppIInternetSession,
    DWORD       dwReserved
    );
extern HRESULT  CoInternetGetSecurityUrl(
    LPCWSTR pwszUrl,
     LPWSTR *ppwszSecUrl,
     PSUACTION   psuAction,
     DWORD dwReserved
    );
extern HRESULT  AsyncInstallDistributionUnit(
    LPCWSTR szDistUnit,
    LPCWSTR szTYPE,
    LPCWSTR szExt,
    DWORD dwFileVersionMS,
    DWORD dwFileVersionLS,
    LPCWSTR szURL,
    IBindCtx *pbc,
    LPVOID   pvReserved,
    DWORD   flags
    );
extern HRESULT  CoInternetGetSecurityUrlEx(
     IUri         *pUri,
     IUri **ppSecUri,
    PSUACTION          psuAction,
      DWORD_PTR dwReserved
    );
typedef
enum _tagINTERNETFEATURELIST
    {	FEATURE_OBJECT_CACHING	= 0,
	FEATURE_ZONE_ELEVATION	= ( FEATURE_OBJECT_CACHING + 1 ) ,
	FEATURE_MIME_HANDLING	= ( FEATURE_ZONE_ELEVATION + 1 ) ,
	FEATURE_MIME_SNIFFING	= ( FEATURE_MIME_HANDLING + 1 ) ,
	FEATURE_WINDOW_RESTRICTIONS	= ( FEATURE_MIME_SNIFFING + 1 ) ,
	FEATURE_WEBOC_POPUPMANAGEMENT	= ( FEATURE_WINDOW_RESTRICTIONS + 1 ) ,
	FEATURE_BEHAVIORS	= ( FEATURE_WEBOC_POPUPMANAGEMENT + 1 ) ,
	FEATURE_DISABLE_MK_PROTOCOL	= ( FEATURE_BEHAVIORS + 1 ) ,
	FEATURE_LOCALMACHINE_LOCKDOWN	= ( FEATURE_DISABLE_MK_PROTOCOL + 1 ) ,
	FEATURE_SECURITYBAND	= ( FEATURE_LOCALMACHINE_LOCKDOWN + 1 ) ,
	FEATURE_RESTRICT_ACTIVEXINSTALL	= ( FEATURE_SECURITYBAND + 1 ) ,
	FEATURE_VALIDATE_NAVIGATE_URL	= ( FEATURE_RESTRICT_ACTIVEXINSTALL + 1 ) ,
	FEATURE_RESTRICT_FILEDOWNLOAD	= ( FEATURE_VALIDATE_NAVIGATE_URL + 1 ) ,
	FEATURE_ADDON_MANAGEMENT	= ( FEATURE_RESTRICT_FILEDOWNLOAD + 1 ) ,
	FEATURE_PROTOCOL_LOCKDOWN	= ( FEATURE_ADDON_MANAGEMENT + 1 ) ,
	FEATURE_HTTP_USERNAME_PASSWORD_DISABLE	= ( FEATURE_PROTOCOL_LOCKDOWN + 1 ) ,
	FEATURE_SAFE_BINDTOOBJECT	= ( FEATURE_HTTP_USERNAME_PASSWORD_DISABLE + 1 ) ,
	FEATURE_UNC_SAVEDFILECHECK	= ( FEATURE_SAFE_BINDTOOBJECT + 1 ) ,
	FEATURE_GET_URL_DOM_FILEPATH_UNENCODED	= ( FEATURE_UNC_SAVEDFILECHECK + 1 ) ,
	FEATURE_TABBED_BROWSING	= ( FEATURE_GET_URL_DOM_FILEPATH_UNENCODED + 1 ) ,
	FEATURE_SSLUX	= ( FEATURE_TABBED_BROWSING + 1 ) ,
	FEATURE_DISABLE_NAVIGATION_SOUNDS	= ( FEATURE_SSLUX + 1 ) ,
	FEATURE_DISABLE_LEGACY_COMPRESSION	= ( FEATURE_DISABLE_NAVIGATION_SOUNDS + 1 ) ,
	FEATURE_FORCE_ADDR_AND_STATUS	= ( FEATURE_DISABLE_LEGACY_COMPRESSION + 1 ) ,
	FEATURE_XMLHTTP	= ( FEATURE_FORCE_ADDR_AND_STATUS + 1 ) ,
	FEATURE_DISABLE_TELNET_PROTOCOL	= ( FEATURE_XMLHTTP + 1 ) ,
	FEATURE_FEEDS	= ( FEATURE_DISABLE_TELNET_PROTOCOL + 1 ) ,
	FEATURE_BLOCK_INPUT_PROMPTS	= ( FEATURE_FEEDS + 1 ) ,
	FEATURE_ENTRY_COUNT	= ( FEATURE_BLOCK_INPUT_PROMPTS + 1 )
    } 	INTERNETFEATURELIST;
extern HRESULT  CoInternetSetFeatureEnabled(
    INTERNETFEATURELIST FeatureEntry,
    DWORD dwFlags,
    BOOL fEnable
    );
extern HRESULT  CoInternetIsFeatureEnabled(
    INTERNETFEATURELIST FeatureEntry,
    DWORD dwFlags
    );
extern HRESULT  CoInternetIsFeatureEnabledForUrl(
    INTERNETFEATURELIST FeatureEntry,
    DWORD dwFlags,
    LPCWSTR szURL,
    IInternetSecurityManager *pSecMgr
    );
extern HRESULT  CoInternetIsFeatureEnabledForIUri(
    INTERNETFEATURELIST FeatureEntry,
    DWORD dwFlags,
    IUri * pIUri,
    IInternetSecurityManagerEx2 *pSecMgr
    );
extern HRESULT  CoInternetIsFeatureZoneElevationEnabled(
    LPCWSTR szFromURL,
    LPCWSTR szToURL,
    IInternetSecurityManager *pSecMgr,
    DWORD dwFlags
    );
extern HRESULT  CopyStgMedium(const STGMEDIUM * pcstgmedSrc,
                           STGMEDIUM * pstgmedDest);
extern HRESULT  CopyBindInfo( const BINDINFO * pcbiSrc,
                           BINDINFO * pbiDest );
extern void  ReleaseBindInfo( BINDINFO * pbindinfo );
extern HRESULT  CoInternetCreateSecurityManager(IServiceProvider *pSP, IInternetSecurityManager **ppSM, DWORD dwReserved);
extern HRESULT  CoInternetCreateZoneManager(IServiceProvider *pSP, IInternetZoneManager **ppZM, DWORD dwReserved);
extern const IID CLSID_InternetSecurityManager;
extern const IID CLSID_InternetZoneManager;
extern const IID CLSID_PersistentZoneIdentifier;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0032_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0032_v0_0_s_ifspec;
extern const IID IID_IInternetSecurityMgrSite;
    typedef struct IInternetSecurityMgrSiteVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetSecurityMgrSite * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetSecurityMgrSite * This);
        ULONG (  *Release )(
            IInternetSecurityMgrSite * This);
        HRESULT (  *GetWindow )(
            IInternetSecurityMgrSite * This,
             HWND *phwnd);
        HRESULT (  *EnableModeless )(
            IInternetSecurityMgrSite * This,
             BOOL fEnable);
    } IInternetSecurityMgrSiteVtbl;
    struct IInternetSecurityMgrSite
    {
         struct IInternetSecurityMgrSiteVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0033_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0033_v0_0_s_ifspec;
typedef
enum __MIDL_IInternetSecurityManager_0001
    {	PUAF_DEFAULT	= 0,
	PUAF_NOUI	= 0x1,
	PUAF_ISFILE	= 0x2,
	PUAF_WARN_IF_DENIED	= 0x4,
	PUAF_FORCEUI_FOREGROUND	= 0x8,
	PUAF_CHECK_TIFS	= 0x10,
	PUAF_DONTCHECKBOXINDIALOG	= 0x20,
	PUAF_TRUSTED	= 0x40,
	PUAF_ACCEPT_WILDCARD_SCHEME	= 0x80,
	PUAF_ENFORCERESTRICTED	= 0x100,
	PUAF_NOSAVEDFILECHECK	= 0x200,
	PUAF_REQUIRESAVEDFILECHECK	= 0x400,
	PUAF_DONT_USE_CACHE	= 0x1000,
	PUAF_RESERVED1	= 0x2000,
	PUAF_RESERVED2	= 0x4000,
	PUAF_LMZ_UNLOCKED	= 0x10000,
	PUAF_LMZ_LOCKED	= 0x20000,
	PUAF_DEFAULTZONEPOL	= 0x40000,
	PUAF_NPL_USE_LOCKED_IF_RESTRICTED	= 0x80000,
	PUAF_NOUIIFLOCKED	= 0x100000,
	PUAF_DRAGPROTOCOLCHECK	= 0x200000
    } 	PUAF;
typedef
enum __MIDL_IInternetSecurityManager_0002
    {	PUAFOUT_DEFAULT	= 0,
	PUAFOUT_ISLOCKZONEPOLICY	= 0x1
    } 	PUAFOUT;
typedef
enum __MIDL_IInternetSecurityManager_0003
    {	SZM_CREATE	= 0,
	SZM_DELETE	= 0x1
    } 	SZM_FLAGS;
extern const IID IID_IInternetSecurityManager;
    typedef struct IInternetSecurityManagerVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetSecurityManager * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetSecurityManager * This);
        ULONG (  *Release )(
            IInternetSecurityManager * This);
        HRESULT (  *SetSecuritySite )(
            IInternetSecurityManager * This,
              IInternetSecurityMgrSite *pSite);
        HRESULT (  *GetSecuritySite )(
            IInternetSecurityManager * This,
              IInternetSecurityMgrSite **ppSite);
        HRESULT (  *MapUrlToZone )(
            IInternetSecurityManager * This,
              LPCWSTR pwszUrl,
              DWORD *pdwZone,
             DWORD dwFlags);
        HRESULT (  *GetSecurityId )(
            IInternetSecurityManager * This,
              LPCWSTR pwszUrl,
              BYTE *pbSecurityId,
              DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
        HRESULT (  *ProcessUrlAction )(
            IInternetSecurityManager * This,
              LPCWSTR pwszUrl,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved);
        HRESULT (  *QueryCustomPolicy )(
            IInternetSecurityManager * This,
              LPCWSTR pwszUrl,
              const GUID * const guidKey,
              BYTE **ppPolicy,
              DWORD *pcbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwReserved);
        HRESULT (  *SetZoneMapping )(
            IInternetSecurityManager * This,
             DWORD dwZone,
              LPCWSTR lpszPattern,
             DWORD dwFlags);
        HRESULT (  *GetZoneMappings )(
            IInternetSecurityManager * This,
             DWORD dwZone,
              IEnumString **ppenumString,
             DWORD dwFlags);
    } IInternetSecurityManagerVtbl;
    struct IInternetSecurityManager
    {
         struct IInternetSecurityManagerVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0034_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0034_v0_0_s_ifspec;
extern const IID IID_IInternetSecurityManagerEx;
    typedef struct IInternetSecurityManagerExVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetSecurityManagerEx * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetSecurityManagerEx * This);
        ULONG (  *Release )(
            IInternetSecurityManagerEx * This);
        HRESULT (  *SetSecuritySite )(
            IInternetSecurityManagerEx * This,
              IInternetSecurityMgrSite *pSite);
        HRESULT (  *GetSecuritySite )(
            IInternetSecurityManagerEx * This,
              IInternetSecurityMgrSite **ppSite);
        HRESULT (  *MapUrlToZone )(
            IInternetSecurityManagerEx * This,
              LPCWSTR pwszUrl,
              DWORD *pdwZone,
             DWORD dwFlags);
        HRESULT (  *GetSecurityId )(
            IInternetSecurityManagerEx * This,
              LPCWSTR pwszUrl,
              BYTE *pbSecurityId,
              DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
        HRESULT (  *ProcessUrlAction )(
            IInternetSecurityManagerEx * This,
              LPCWSTR pwszUrl,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved);
        HRESULT (  *QueryCustomPolicy )(
            IInternetSecurityManagerEx * This,
              LPCWSTR pwszUrl,
              const GUID * const guidKey,
              BYTE **ppPolicy,
              DWORD *pcbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwReserved);
        HRESULT (  *SetZoneMapping )(
            IInternetSecurityManagerEx * This,
             DWORD dwZone,
              LPCWSTR lpszPattern,
             DWORD dwFlags);
        HRESULT (  *GetZoneMappings )(
            IInternetSecurityManagerEx * This,
             DWORD dwZone,
              IEnumString **ppenumString,
             DWORD dwFlags);
        HRESULT (  *ProcessUrlActionEx )(
            IInternetSecurityManagerEx * This,
              LPCWSTR pwszUrl,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved,
              DWORD *pdwOutFlags);
    } IInternetSecurityManagerExVtbl;
    struct IInternetSecurityManagerEx
    {
         struct IInternetSecurityManagerExVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0035_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0035_v0_0_s_ifspec;
extern const IID IID_IInternetSecurityManagerEx2;
    typedef struct IInternetSecurityManagerEx2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetSecurityManagerEx2 * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetSecurityManagerEx2 * This);
        ULONG (  *Release )(
            IInternetSecurityManagerEx2 * This);
        HRESULT (  *SetSecuritySite )(
            IInternetSecurityManagerEx2 * This,
              IInternetSecurityMgrSite *pSite);
        HRESULT (  *GetSecuritySite )(
            IInternetSecurityManagerEx2 * This,
              IInternetSecurityMgrSite **ppSite);
        HRESULT (  *MapUrlToZone )(
            IInternetSecurityManagerEx2 * This,
              LPCWSTR pwszUrl,
              DWORD *pdwZone,
             DWORD dwFlags);
        HRESULT (  *GetSecurityId )(
            IInternetSecurityManagerEx2 * This,
              LPCWSTR pwszUrl,
              BYTE *pbSecurityId,
              DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
        HRESULT (  *ProcessUrlAction )(
            IInternetSecurityManagerEx2 * This,
              LPCWSTR pwszUrl,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved);
        HRESULT (  *QueryCustomPolicy )(
            IInternetSecurityManagerEx2 * This,
              LPCWSTR pwszUrl,
              const GUID * const guidKey,
              BYTE **ppPolicy,
              DWORD *pcbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwReserved);
        HRESULT (  *SetZoneMapping )(
            IInternetSecurityManagerEx2 * This,
             DWORD dwZone,
              LPCWSTR lpszPattern,
             DWORD dwFlags);
        HRESULT (  *GetZoneMappings )(
            IInternetSecurityManagerEx2 * This,
             DWORD dwZone,
              IEnumString **ppenumString,
             DWORD dwFlags);
        HRESULT (  *ProcessUrlActionEx )(
            IInternetSecurityManagerEx2 * This,
              LPCWSTR pwszUrl,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved,
              DWORD *pdwOutFlags);
        HRESULT (  *MapUrlToZoneEx2 )(
            IInternetSecurityManagerEx2 * This,
              IUri *pUri,
              DWORD *pdwZone,
             DWORD dwFlags,
              LPWSTR *ppwszMappedUrl,
              DWORD *pdwOutFlags);
        HRESULT (  *ProcessUrlActionEx2 )(
            IInternetSecurityManagerEx2 * This,
              IUri *pUri,
             DWORD dwAction,
              BYTE *pPolicy,
             DWORD cbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD_PTR dwReserved,
              DWORD *pdwOutFlags);
        HRESULT (  *GetSecurityIdEx2 )(
            IInternetSecurityManagerEx2 * This,
              IUri *pUri,
              BYTE *pbSecurityId,
              DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
        HRESULT (  *QueryCustomPolicyEx2 )(
            IInternetSecurityManagerEx2 * This,
              IUri *pUri,
              const GUID * const guidKey,
              BYTE **ppPolicy,
              DWORD *pcbPolicy,
              BYTE *pContext,
             DWORD cbContext,
             DWORD_PTR dwReserved);
    } IInternetSecurityManagerEx2Vtbl;
    struct IInternetSecurityManagerEx2
    {
         struct IInternetSecurityManagerEx2Vtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0036_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0036_v0_0_s_ifspec;
extern const IID IID_IZoneIdentifier;
    typedef struct IZoneIdentifierVtbl
    {
        HRESULT (  *QueryInterface )(
            IZoneIdentifier * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IZoneIdentifier * This);
        ULONG (  *Release )(
            IZoneIdentifier * This);
        HRESULT (  *GetId )(
            IZoneIdentifier * This,
             DWORD *pdwZone);
        HRESULT (  *SetId )(
            IZoneIdentifier * This,
             DWORD dwZone);
        HRESULT (  *Remove )(
            IZoneIdentifier * This);
    } IZoneIdentifierVtbl;
    struct IZoneIdentifier
    {
         struct IZoneIdentifierVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0037_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0037_v0_0_s_ifspec;
extern const IID IID_IInternetHostSecurityManager;
    typedef struct IInternetHostSecurityManagerVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetHostSecurityManager * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetHostSecurityManager * This);
        ULONG (  *Release )(
            IInternetHostSecurityManager * This);
        HRESULT (  *GetSecurityId )(
            IInternetHostSecurityManager * This,
             BYTE *pbSecurityId,
             DWORD *pcbSecurityId,
             DWORD_PTR dwReserved);
        HRESULT (  *ProcessUrlAction )(
            IInternetHostSecurityManager * This,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             BYTE *pContext,
             DWORD cbContext,
             DWORD dwFlags,
             DWORD dwReserved);
        HRESULT (  *QueryCustomPolicy )(
            IInternetHostSecurityManager * This,
             const GUID * const guidKey,
             BYTE **ppPolicy,
             DWORD *pcbPolicy,
             BYTE *pContext,
             DWORD cbContext,
             DWORD dwReserved);
    } IInternetHostSecurityManagerVtbl;
    struct IInternetHostSecurityManager
    {
         struct IInternetHostSecurityManagerVtbl *lpVtbl;
    };
extern const GUID GUID_CUSTOM_LOCALMACHINEZONEUNLOCKED;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0038_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0038_v0_0_s_ifspec;
typedef  IInternetZoneManager *LPURLZONEMANAGER;
typedef
enum tagURLZONE
    {	URLZONE_INVALID	= -1,
	URLZONE_PREDEFINED_MIN	= 0,
	URLZONE_LOCAL_MACHINE	= 0,
	URLZONE_INTRANET	= ( URLZONE_LOCAL_MACHINE + 1 ) ,
	URLZONE_TRUSTED	= ( URLZONE_INTRANET + 1 ) ,
	URLZONE_INTERNET	= ( URLZONE_TRUSTED + 1 ) ,
	URLZONE_UNTRUSTED	= ( URLZONE_INTERNET + 1 ) ,
	URLZONE_PREDEFINED_MAX	= 999,
	URLZONE_USER_MIN	= 1000,
	URLZONE_USER_MAX	= 10000
    } 	URLZONE;
typedef
enum tagURLTEMPLATE
    {	URLTEMPLATE_CUSTOM	= 0,
	URLTEMPLATE_PREDEFINED_MIN	= 0x10000,
	URLTEMPLATE_LOW	= 0x10000,
	URLTEMPLATE_MEDLOW	= 0x10500,
	URLTEMPLATE_MEDIUM	= 0x11000,
	URLTEMPLATE_MEDHIGH	= 0x11500,
	URLTEMPLATE_HIGH	= 0x12000,
	URLTEMPLATE_PREDEFINED_MAX	= 0x20000
    } 	URLTEMPLATE;
enum __MIDL_IInternetZoneManager_0001
    {	MAX_ZONE_PATH	= 260,
	MAX_ZONE_DESCRIPTION	= 200
    } ;
typedef
enum __MIDL_IInternetZoneManager_0002
    {	ZAFLAGS_CUSTOM_EDIT	= 0x1,
	ZAFLAGS_ADD_SITES	= 0x2,
	ZAFLAGS_REQUIRE_VERIFICATION	= 0x4,
	ZAFLAGS_INCLUDE_PROXY_OVERRIDE	= 0x8,
	ZAFLAGS_INCLUDE_INTRANET_SITES	= 0x10,
	ZAFLAGS_NO_UI	= 0x20,
	ZAFLAGS_SUPPORTS_VERIFICATION	= 0x40,
	ZAFLAGS_UNC_AS_INTRANET	= 0x80,
	ZAFLAGS_DETECT_INTRANET	= 0x100,
	ZAFLAGS_USE_LOCKED_ZONES	= 0x10000,
	ZAFLAGS_VERIFY_TEMPLATE_SETTINGS	= 0x20000,
	ZAFLAGS_NO_CACHE	= 0x40000
    } 	ZAFLAGS;
typedef struct _ZONEATTRIBUTES
    {
    ULONG cbSize;
    WCHAR szDisplayName[ 260 ];
    WCHAR szDescription[ 200 ];
    WCHAR szIconPath[ 260 ];
    DWORD dwTemplateMinLevel;
    DWORD dwTemplateRecommended;
    DWORD dwTemplateCurrentLevel;
    DWORD dwFlags;
    } 	ZONEATTRIBUTES;
typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES;
typedef
enum _URLZONEREG
    {	URLZONEREG_DEFAULT	= 0,
	URLZONEREG_HKLM	= ( URLZONEREG_DEFAULT + 1 ) ,
	URLZONEREG_HKCU	= ( URLZONEREG_HKLM + 1 )
    } 	URLZONEREG;
extern const IID IID_IInternetZoneManager;
    typedef struct IInternetZoneManagerVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetZoneManager * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetZoneManager * This);
        ULONG (  *Release )(
            IInternetZoneManager * This);
        HRESULT (  *GetZoneAttributes )(
            IInternetZoneManager * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *SetZoneAttributes )(
            IInternetZoneManager * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *GetZoneCustomPolicy )(
            IInternetZoneManager * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE **ppPolicy,
             DWORD *pcbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneCustomPolicy )(
            IInternetZoneManager * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *GetZoneActionPolicy )(
            IInternetZoneManager * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneActionPolicy )(
            IInternetZoneManager * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *PromptAction )(
            IInternetZoneManager * This,
             DWORD dwAction,
             HWND hwndParent,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwPromptFlags);
        HRESULT (  *LogAction )(
            IInternetZoneManager * This,
             DWORD dwAction,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwLogFlags);
        HRESULT (  *CreateZoneEnumerator )(
            IInternetZoneManager * This,
             DWORD *pdwEnum,
             DWORD *pdwCount,
             DWORD dwFlags);
        HRESULT (  *GetZoneAt )(
            IInternetZoneManager * This,
             DWORD dwEnum,
             DWORD dwIndex,
             DWORD *pdwZone);
        HRESULT (  *DestroyZoneEnumerator )(
            IInternetZoneManager * This,
             DWORD dwEnum);
        HRESULT (  *CopyTemplatePoliciesToZone )(
            IInternetZoneManager * This,
             DWORD dwTemplate,
             DWORD dwZone,
             DWORD dwReserved);
    } IInternetZoneManagerVtbl;
    struct IInternetZoneManager
    {
         struct IInternetZoneManagerVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0039_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0039_v0_0_s_ifspec;
extern const IID IID_IInternetZoneManagerEx;
    typedef struct IInternetZoneManagerExVtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetZoneManagerEx * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetZoneManagerEx * This);
        ULONG (  *Release )(
            IInternetZoneManagerEx * This);
        HRESULT (  *GetZoneAttributes )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *SetZoneAttributes )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *GetZoneCustomPolicy )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE **ppPolicy,
             DWORD *pcbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneCustomPolicy )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *GetZoneActionPolicy )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneActionPolicy )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *PromptAction )(
            IInternetZoneManagerEx * This,
             DWORD dwAction,
             HWND hwndParent,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwPromptFlags);
        HRESULT (  *LogAction )(
            IInternetZoneManagerEx * This,
             DWORD dwAction,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwLogFlags);
        HRESULT (  *CreateZoneEnumerator )(
            IInternetZoneManagerEx * This,
             DWORD *pdwEnum,
             DWORD *pdwCount,
             DWORD dwFlags);
        HRESULT (  *GetZoneAt )(
            IInternetZoneManagerEx * This,
             DWORD dwEnum,
             DWORD dwIndex,
             DWORD *pdwZone);
        HRESULT (  *DestroyZoneEnumerator )(
            IInternetZoneManagerEx * This,
             DWORD dwEnum);
        HRESULT (  *CopyTemplatePoliciesToZone )(
            IInternetZoneManagerEx * This,
             DWORD dwTemplate,
             DWORD dwZone,
             DWORD dwReserved);
        HRESULT (  *GetZoneActionPolicyEx )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg,
             DWORD dwFlags);
        HRESULT (  *SetZoneActionPolicyEx )(
            IInternetZoneManagerEx * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg,
             DWORD dwFlags);
    } IInternetZoneManagerExVtbl;
    struct IInternetZoneManagerEx
    {
         struct IInternetZoneManagerExVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0040_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0040_v0_0_s_ifspec;
extern const IID IID_IInternetZoneManagerEx2;
    typedef struct IInternetZoneManagerEx2Vtbl
    {
        HRESULT (  *QueryInterface )(
            IInternetZoneManagerEx2 * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IInternetZoneManagerEx2 * This);
        ULONG (  *Release )(
            IInternetZoneManagerEx2 * This);
        HRESULT (  *GetZoneAttributes )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *SetZoneAttributes )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes);
        HRESULT (  *GetZoneCustomPolicy )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE **ppPolicy,
             DWORD *pcbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneCustomPolicy )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             const GUID * const guidKey,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *GetZoneActionPolicy )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *SetZoneActionPolicy )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg);
        HRESULT (  *PromptAction )(
            IInternetZoneManagerEx2 * This,
             DWORD dwAction,
             HWND hwndParent,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwPromptFlags);
        HRESULT (  *LogAction )(
            IInternetZoneManagerEx2 * This,
             DWORD dwAction,
             LPCWSTR pwszUrl,
             LPCWSTR pwszText,
             DWORD dwLogFlags);
        HRESULT (  *CreateZoneEnumerator )(
            IInternetZoneManagerEx2 * This,
             DWORD *pdwEnum,
             DWORD *pdwCount,
             DWORD dwFlags);
        HRESULT (  *GetZoneAt )(
            IInternetZoneManagerEx2 * This,
             DWORD dwEnum,
             DWORD dwIndex,
             DWORD *pdwZone);
        HRESULT (  *DestroyZoneEnumerator )(
            IInternetZoneManagerEx2 * This,
             DWORD dwEnum);
        HRESULT (  *CopyTemplatePoliciesToZone )(
            IInternetZoneManagerEx2 * This,
             DWORD dwTemplate,
             DWORD dwZone,
             DWORD dwReserved);
        HRESULT (  *GetZoneActionPolicyEx )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg,
             DWORD dwFlags);
        HRESULT (  *SetZoneActionPolicyEx )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             DWORD dwAction,
             BYTE *pPolicy,
             DWORD cbPolicy,
             URLZONEREG urlZoneReg,
             DWORD dwFlags);
        HRESULT (  *GetZoneAttributesEx )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZone,
             ZONEATTRIBUTES *pZoneAttributes,
             DWORD dwFlags);
        HRESULT (  *GetZoneSecurityState )(
            IInternetZoneManagerEx2 * This,
             DWORD dwZoneIndex,
             BOOL fRespectPolicy,
             LPDWORD pdwState,
             BOOL *pfPolicyEncountered);
        HRESULT (  *GetIESecurityState )(
            IInternetZoneManagerEx2 * This,
             BOOL fRespectPolicy,
             LPDWORD pdwState,
             BOOL *pfPolicyEncountered,
             BOOL fNoCache);
        HRESULT (  *FixUnsecureSettings )(
            IInternetZoneManagerEx2 * This);
    } IInternetZoneManagerEx2Vtbl;
    struct IInternetZoneManagerEx2
    {
         struct IInternetZoneManagerEx2Vtbl *lpVtbl;
    };
extern const IID CLSID_SoftDistExt;
typedef struct _tagCODEBASEHOLD
    {
    ULONG cbSize;
    LPWSTR szDistUnit;
    LPWSTR szCodeBase;
    DWORD dwVersionMS;
    DWORD dwVersionLS;
    DWORD dwStyle;
    } 	CODEBASEHOLD;
typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD;
typedef struct _tagSOFTDISTINFO
    {
    ULONG cbSize;
    DWORD dwFlags;
    DWORD dwAdState;
    LPWSTR szTitle;
    LPWSTR szAbstract;
    LPWSTR szHREF;
    DWORD dwInstalledVersionMS;
    DWORD dwInstalledVersionLS;
    DWORD dwUpdateVersionMS;
    DWORD dwUpdateVersionLS;
    DWORD dwAdvertisedVersionMS;
    DWORD dwAdvertisedVersionLS;
    DWORD dwReserved;
    } 	SOFTDISTINFO;
typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0041_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0041_v0_0_s_ifspec;
extern const IID IID_ISoftDistExt;
    typedef struct ISoftDistExtVtbl
    {
        HRESULT (  *QueryInterface )(
            ISoftDistExt * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ISoftDistExt * This);
        ULONG (  *Release )(
            ISoftDistExt * This);
        HRESULT (  *ProcessSoftDist )(
            ISoftDistExt * This,
             LPCWSTR szCDFURL,
             IXMLElement *pSoftDistElement,
             LPSOFTDISTINFO lpsdi);
        HRESULT (  *GetFirstCodeBase )(
            ISoftDistExt * This,
             LPWSTR *szCodeBase,
             LPDWORD dwMaxSize);
        HRESULT (  *GetNextCodeBase )(
            ISoftDistExt * This,
             LPWSTR *szCodeBase,
             LPDWORD dwMaxSize);
        HRESULT (  *AsyncInstallDistributionUnit )(
            ISoftDistExt * This,
             IBindCtx *pbc,
             LPVOID pvReserved,
             DWORD flags,
             LPCODEBASEHOLD lpcbh);
    } ISoftDistExtVtbl;
    struct ISoftDistExt
    {
         struct ISoftDistExtVtbl *lpVtbl;
    };
extern HRESULT  GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi );
extern HRESULT  SetSoftwareUpdateAdvertisementState( LPCWSTR szDistUnit, DWORD dwAdState, DWORD dwAdvertisedVersionMS, DWORD dwAdvertisedVersionLS );
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0042_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0042_v0_0_s_ifspec;
typedef  ICatalogFileInfo *LPCATALOGFILEINFO;
extern const IID IID_ICatalogFileInfo;
    typedef struct ICatalogFileInfoVtbl
    {
        HRESULT (  *QueryInterface )(
            ICatalogFileInfo * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            ICatalogFileInfo * This);
        ULONG (  *Release )(
            ICatalogFileInfo * This);
        HRESULT (  *GetCatalogFile )(
            ICatalogFileInfo * This,
             LPSTR *ppszCatalogFile);
        HRESULT (  *GetJavaTrust )(
            ICatalogFileInfo * This,
             void **ppJavaTrust);
    } ICatalogFileInfoVtbl;
    struct ICatalogFileInfo
    {
         struct ICatalogFileInfoVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0043_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0043_v0_0_s_ifspec;
typedef    IDataFilter *LPDATAFILTER;
extern const IID IID_IDataFilter;
    typedef struct IDataFilterVtbl
    {
        HRESULT (  *QueryInterface )(
            IDataFilter * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IDataFilter * This);
        ULONG (  *Release )(
            IDataFilter * This);
        HRESULT (  *DoEncode )(
            IDataFilter * This,
             DWORD dwFlags,
             LONG lInBufferSize,
              BYTE *pbInBuffer,
             LONG lOutBufferSize,
              BYTE *pbOutBuffer,
             LONG lInBytesAvailable,
              LONG *plInBytesRead,
              LONG *plOutBytesWritten,
             DWORD dwReserved);
        HRESULT (  *DoDecode )(
            IDataFilter * This,
             DWORD dwFlags,
             LONG lInBufferSize,
              BYTE *pbInBuffer,
             LONG lOutBufferSize,
              BYTE *pbOutBuffer,
             LONG lInBytesAvailable,
              LONG *plInBytesRead,
              LONG *plOutBytesWritten,
             DWORD dwReserved);
        HRESULT (  *SetEncodingLevel )(
            IDataFilter * This,
             DWORD dwEncLevel);
    } IDataFilterVtbl;
    struct IDataFilter
    {
         struct IDataFilterVtbl *lpVtbl;
    };
typedef struct _tagPROTOCOLFILTERDATA
    {
    DWORD cbSize;
    IInternetProtocolSink *pProtocolSink;
    IInternetProtocol *pProtocol;
    IUnknown *pUnk;
    DWORD dwFilterFlags;
    } 	PROTOCOLFILTERDATA;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0044_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0044_v0_0_s_ifspec;
typedef  IEncodingFilterFactory *LPENCODINGFILTERFACTORY;
typedef struct _tagDATAINFO
    {
    ULONG ulTotalSize;
    ULONG ulavrPacketSize;
    ULONG ulConnectSpeed;
    ULONG ulProcessorSpeed;
    } 	DATAINFO;
extern const IID IID_IEncodingFilterFactory;
    typedef struct IEncodingFilterFactoryVtbl
    {
        HRESULT (  *QueryInterface )(
            IEncodingFilterFactory * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEncodingFilterFactory * This);
        ULONG (  *Release )(
            IEncodingFilterFactory * This);
        HRESULT (  *FindBestFilter )(
            IEncodingFilterFactory * This,
             LPCWSTR pwzCodeIn,
             LPCWSTR pwzCodeOut,
             DATAINFO info,
             IDataFilter **ppDF);
        HRESULT (  *GetDefaultFilter )(
            IEncodingFilterFactory * This,
             LPCWSTR pwzCodeIn,
             LPCWSTR pwzCodeOut,
             IDataFilter **ppDF);
    } IEncodingFilterFactoryVtbl;
    struct IEncodingFilterFactory
    {
         struct IEncodingFilterFactoryVtbl *lpVtbl;
    };
BOOL  IsLoggingEnabledA( LPCSTR  pszUrl);
BOOL  IsLoggingEnabledW( LPCWSTR  pwszUrl);
typedef struct _tagHIT_LOGGING_INFO
    {
    DWORD dwStructSize;
    LPSTR lpszLoggedUrlName;
    SYSTEMTIME StartTime;
    SYSTEMTIME EndTime;
    LPSTR lpszExtendedInfo;
    } 	HIT_LOGGING_INFO;
typedef struct _tagHIT_LOGGING_INFO *LPHIT_LOGGING_INFO;
BOOL  WriteHitLogging( LPHIT_LOGGING_INFO lpLogginginfo);
struct CONFIRMSAFETY
    {
    CLSID clsid;
    IUnknown *pUnk;
    DWORD dwFlags;
    } ;
extern const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0045_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0045_v0_0_s_ifspec;
typedef  IWrappedProtocol *LPIWRAPPEDPROTOCOL;
extern const IID IID_IWrappedProtocol;
    typedef struct IWrappedProtocolVtbl
    {
        HRESULT (  *QueryInterface )(
            IWrappedProtocol * This,
             const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IWrappedProtocol * This);
        ULONG (  *Release )(
            IWrappedProtocol * This);
        HRESULT (  *GetWrapperCode )(
            IWrappedProtocol * This,
             LONG *pnCode,
             DWORD_PTR dwReserved);
    } IWrappedProtocolVtbl;
    struct IWrappedProtocol
    {
         struct IWrappedProtocolVtbl *lpVtbl;
    };
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0046_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_0046_v0_0_s_ifspec;
unsigned long               BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree(     unsigned long *, BSTR * );
unsigned long               HWND_UserSize(     unsigned long *, unsigned long            , HWND * );
unsigned char *   HWND_UserMarshal(  unsigned long *, unsigned char *, HWND * );
unsigned char *   HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
void                        HWND_UserFree(     unsigned long *, HWND * );
unsigned long               BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree64(     unsigned long *, BSTR * );
unsigned long               HWND_UserSize64(     unsigned long *, unsigned long            , HWND * );
unsigned char *   HWND_UserMarshal64(  unsigned long *, unsigned char *, HWND * );
unsigned char *   HWND_UserUnmarshal64(unsigned long *, unsigned char *, HWND * );
void                        HWND_UserFree64(     unsigned long *, HWND * );
 HRESULT  IBinding_GetBindResult_Proxy(
    IBinding * This,
     CLSID *pclsidProtocol,
     DWORD *pdwResult,
     LPOLESTR *pszResult,
     DWORD *pdwReserved);
 HRESULT  IBinding_GetBindResult_Stub(
    IBinding * This,
      CLSID *pclsidProtocol,
      DWORD *pdwResult,
      LPOLESTR *pszResult,
     DWORD dwReserved);
 HRESULT  IBindStatusCallback_GetBindInfo_Proxy(
    IBindStatusCallback * This,
     DWORD *grfBINDF,
     BINDINFO *pbindinfo);
 HRESULT  IBindStatusCallback_GetBindInfo_Stub(
    IBindStatusCallback * This,
      DWORD *grfBINDF,
      RemBINDINFO *pbindinfo,
      RemSTGMEDIUM *pstgmed);
 HRESULT  IBindStatusCallback_OnDataAvailable_Proxy(
    IBindStatusCallback * This,
     DWORD grfBSCF,
     DWORD dwSize,
     FORMATETC *pformatetc,
     STGMEDIUM *pstgmed);
 HRESULT  IBindStatusCallback_OnDataAvailable_Stub(
    IBindStatusCallback * This,
     DWORD grfBSCF,
     DWORD dwSize,
      RemFORMATETC *pformatetc,
      RemSTGMEDIUM *pstgmed);
 HRESULT  IWinInetInfo_QueryOption_Proxy(
    IWinInetInfo * This,
     DWORD dwOption,
     LPVOID pBuffer,
     DWORD *pcbBuf);
 HRESULT  IWinInetInfo_QueryOption_Stub(
    IWinInetInfo * This,
     DWORD dwOption,
      BYTE *pBuffer,
      DWORD *pcbBuf);
 HRESULT  IWinInetHttpInfo_QueryInfo_Proxy(
    IWinInetHttpInfo * This,
     DWORD dwOption,
     LPVOID pBuffer,
     DWORD *pcbBuf,
     DWORD *pdwFlags,
     DWORD *pdwReserved);
 HRESULT  IWinInetHttpInfo_QueryInfo_Stub(
    IWinInetHttpInfo * This,
     DWORD dwOption,
      BYTE *pBuffer,
      DWORD *pcbBuf,
      DWORD *pdwFlags,
      DWORD *pdwReserved);
 HRESULT  IBindHost_MonikerBindToStorage_Proxy(
    IBindHost * This,
     IMoniker *pMk,
     IBindCtx *pBC,
     IBindStatusCallback *pBSC,
     const IID * const riid,
     void **ppvObj);
 HRESULT  IBindHost_MonikerBindToStorage_Stub(
    IBindHost * This,
      IMoniker *pMk,
      IBindCtx *pBC,
      IBindStatusCallback *pBSC,
      const IID * const riid,
      IUnknown **ppvObj);
 HRESULT  IBindHost_MonikerBindToObject_Proxy(
    IBindHost * This,
     IMoniker *pMk,
     IBindCtx *pBC,
     IBindStatusCallback *pBSC,
     const IID * const riid,
     void **ppvObj);
 HRESULT  IBindHost_MonikerBindToObject_Stub(
    IBindHost * This,
      IMoniker *pMk,
      IBindCtx *pBC,
      IBindStatusCallback *pBSC,
      const IID * const riid,
      IUnknown **ppvObj);
typedef struct IPropertyStorage IPropertyStorage;
typedef struct IPropertySetStorage IPropertySetStorage;
typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG;
typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
typedef struct tagVersionedStream
    {
    GUID guidVersion;
    IStream *pStream;
    } 	VERSIONEDSTREAM;
typedef struct tagVersionedStream *LPVERSIONEDSTREAM;
typedef struct tagPROPVARIANT PROPVARIANT;
typedef struct tagCAC
    {
    ULONG cElems;
    CHAR *pElems;
    } 	CAC;
typedef struct tagCAUB
    {
    ULONG cElems;
    UCHAR *pElems;
    } 	CAUB;
typedef struct tagCAI
    {
    ULONG cElems;
    SHORT *pElems;
    } 	CAI;
typedef struct tagCAUI
    {
    ULONG cElems;
    USHORT *pElems;
    } 	CAUI;
typedef struct tagCAL
    {
    ULONG cElems;
    LONG *pElems;
    } 	CAL;
typedef struct tagCAUL
    {
    ULONG cElems;
    ULONG *pElems;
    } 	CAUL;
typedef struct tagCAFLT
    {
    ULONG cElems;
    FLOAT *pElems;
    } 	CAFLT;
typedef struct tagCADBL
    {
    ULONG cElems;
    DOUBLE *pElems;
    } 	CADBL;
typedef struct tagCACY
    {
    ULONG cElems;
    CY *pElems;
    } 	CACY;
typedef struct tagCADATE
    {
    ULONG cElems;
    DATE *pElems;
    } 	CADATE;
typedef struct tagCABSTR
    {
    ULONG cElems;
    BSTR *pElems;
    } 	CABSTR;
typedef struct tagCABSTRBLOB
    {
    ULONG cElems;
    BSTRBLOB *pElems;
    } 	CABSTRBLOB;
typedef struct tagCABOOL
    {
    ULONG cElems;
    VARIANT_BOOL *pElems;
    } 	CABOOL;
typedef struct tagCASCODE
    {
    ULONG cElems;
    SCODE *pElems;
    } 	CASCODE;
typedef struct tagCAPROPVARIANT
    {
    ULONG cElems;
    PROPVARIANT *pElems;
    } 	CAPROPVARIANT;
typedef struct tagCAH
    {
    ULONG cElems;
    LARGE_INTEGER *pElems;
    } 	CAH;
typedef struct tagCAUH
    {
    ULONG cElems;
    ULARGE_INTEGER *pElems;
    } 	CAUH;
typedef struct tagCALPSTR
    {
    ULONG cElems;
    LPSTR *pElems;
    } 	CALPSTR;
typedef struct tagCALPWSTR
    {
    ULONG cElems;
    LPWSTR *pElems;
    } 	CALPWSTR;
typedef struct tagCAFILETIME
    {
    ULONG cElems;
    FILETIME *pElems;
    } 	CAFILETIME;
typedef struct tagCACLIPDATA
    {
    ULONG cElems;
    CLIPDATA *pElems;
    } 	CACLIPDATA;
typedef struct tagCACLSID
    {
    ULONG cElems;
    CLSID *pElems;
    } 	CACLSID;
typedef WORD PROPVAR_PAD1;
typedef WORD PROPVAR_PAD2;
typedef WORD PROPVAR_PAD3;
struct tagPROPVARIANT {
  union {
struct
    {
    VARTYPE vt;
    PROPVAR_PAD1 wReserved1;
    PROPVAR_PAD2 wReserved2;
    PROPVAR_PAD3 wReserved3;
     union
        {
        CHAR cVal;
        UCHAR bVal;
        SHORT iVal;
        USHORT uiVal;
        LONG lVal;
        ULONG ulVal;
        INT intVal;
        UINT uintVal;
        LARGE_INTEGER hVal;
        ULARGE_INTEGER uhVal;
        FLOAT fltVal;
        DOUBLE dblVal;
        VARIANT_BOOL boolVal;
        SCODE scode;
        CY cyVal;
        DATE date;
        FILETIME filetime;
        CLSID *puuid;
        CLIPDATA *pclipdata;
        BSTR bstrVal;
        BSTRBLOB bstrblobVal;
        BLOB blob;
        LPSTR pszVal;
        LPWSTR pwszVal;
        IUnknown *punkVal;
        IDispatch *pdispVal;
        IStream *pStream;
        IStorage *pStorage;
        LPVERSIONEDSTREAM pVersionedStream;
        LPSAFEARRAY parray;
        CAC cac;
        CAUB caub;
        CAI cai;
        CAUI caui;
        CAL cal;
        CAUL caul;
        CAH cah;
        CAUH cauh;
        CAFLT caflt;
        CADBL cadbl;
        CABOOL cabool;
        CASCODE cascode;
        CACY cacy;
        CADATE cadate;
        CAFILETIME cafiletime;
        CACLSID cauuid;
        CACLIPDATA caclipdata;
        CABSTR cabstr;
        CABSTRBLOB cabstrblob;
        CALPSTR calpstr;
        CALPWSTR calpwstr;
        CAPROPVARIANT capropvar;
        CHAR *pcVal;
        UCHAR *pbVal;
        SHORT *piVal;
        USHORT *puiVal;
        LONG *plVal;
        ULONG *pulVal;
        INT *pintVal;
        UINT *puintVal;
        FLOAT *pfltVal;
        DOUBLE *pdblVal;
        VARIANT_BOOL *pboolVal;
        DECIMAL *pdecVal;
        SCODE *pscode;
        CY *pcyVal;
        DATE *pdate;
        BSTR *pbstrVal;
        IUnknown **ppunkVal;
        IDispatch **ppdispVal;
        LPSAFEARRAY *pparray;
        PROPVARIANT *pvarVal;
        } 	;
    } ;
    DECIMAL decVal;
  };
};
typedef struct tagPROPVARIANT * LPPROPVARIANT;
enum PIDMSI_STATUS_VALUE
    {	PIDMSI_STATUS_NORMAL	= 0,
	PIDMSI_STATUS_NEW	= ( PIDMSI_STATUS_NORMAL + 1 ) ,
	PIDMSI_STATUS_PRELIM	= ( PIDMSI_STATUS_NEW + 1 ) ,
	PIDMSI_STATUS_DRAFT	= ( PIDMSI_STATUS_PRELIM + 1 ) ,
	PIDMSI_STATUS_INPROGRESS	= ( PIDMSI_STATUS_DRAFT + 1 ) ,
	PIDMSI_STATUS_EDIT	= ( PIDMSI_STATUS_INPROGRESS + 1 ) ,
	PIDMSI_STATUS_REVIEW	= ( PIDMSI_STATUS_EDIT + 1 ) ,
	PIDMSI_STATUS_PROOF	= ( PIDMSI_STATUS_REVIEW + 1 ) ,
	PIDMSI_STATUS_FINAL	= ( PIDMSI_STATUS_PROOF + 1 ) ,
	PIDMSI_STATUS_OTHER	= 0x7fff
    } ;
typedef struct tagPROPSPEC
    {
    ULONG ulKind;
     union
        {
        PROPID propid;
        LPOLESTR lpwstr;
        } 	;
    } 	PROPSPEC;
typedef struct tagSTATPROPSTG
    {
    LPOLESTR lpwstrName;
    PROPID propid;
    VARTYPE vt;
    } 	STATPROPSTG;
typedef struct tagSTATPROPSETSTG
    {
    FMTID fmtid;
    CLSID clsid;
    DWORD grfFlags;
    FILETIME mtime;
    FILETIME ctime;
    FILETIME atime;
    DWORD dwOSVersion;
    } 	STATPROPSETSTG;
extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_s_ifspec;
extern const IID IID_IPropertyStorage;
    typedef struct IPropertyStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IPropertyStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPropertyStorage * This);
        ULONG (  *Release )(
            IPropertyStorage * This);
        HRESULT (  *ReadMultiple )(
            IPropertyStorage * This,
             ULONG cpspec,
              const PROPSPEC rgpspec[  ],
              PROPVARIANT rgpropvar[  ]);
        HRESULT (  *WriteMultiple )(
            IPropertyStorage * This,
             ULONG cpspec,
              const PROPSPEC rgpspec[  ],
              const PROPVARIANT rgpropvar[  ],
             PROPID propidNameFirst);
        HRESULT (  *DeleteMultiple )(
            IPropertyStorage * This,
             ULONG cpspec,
              const PROPSPEC rgpspec[  ]);
        HRESULT (  *ReadPropertyNames )(
            IPropertyStorage * This,
             ULONG cpropid,
              const PROPID rgpropid[  ],
              LPOLESTR rglpwstrName[  ]);
        HRESULT (  *WritePropertyNames )(
            IPropertyStorage * This,
             ULONG cpropid,
              const PROPID rgpropid[  ],
              const LPOLESTR rglpwstrName[  ]);
        HRESULT (  *DeletePropertyNames )(
            IPropertyStorage * This,
             ULONG cpropid,
              const PROPID rgpropid[  ]);
        HRESULT (  *Commit )(
            IPropertyStorage * This,
             DWORD grfCommitFlags);
        HRESULT (  *Revert )(
            IPropertyStorage * This);
        HRESULT (  *Enum )(
            IPropertyStorage * This,
              IEnumSTATPROPSTG **ppenum);
        HRESULT (  *SetTimes )(
            IPropertyStorage * This,
              const FILETIME *pctime,
              const FILETIME *patime,
              const FILETIME *pmtime);
        HRESULT (  *SetClass )(
            IPropertyStorage * This,
              const IID * const clsid);
        HRESULT (  *Stat )(
            IPropertyStorage * This,
              STATPROPSETSTG *pstatpsstg);
    } IPropertyStorageVtbl;
    struct IPropertyStorage
    {
         struct IPropertyStorageVtbl *lpVtbl;
    };
typedef    IPropertySetStorage *LPPROPERTYSETSTORAGE;
extern const IID IID_IPropertySetStorage;
    typedef struct IPropertySetStorageVtbl
    {
        HRESULT (  *QueryInterface )(
            IPropertySetStorage * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IPropertySetStorage * This);
        ULONG (  *Release )(
            IPropertySetStorage * This);
        HRESULT (  *Create )(
            IPropertySetStorage * This,
              const IID * const rfmtid,
              const CLSID *pclsid,
             DWORD grfFlags,
             DWORD grfMode,
              IPropertyStorage **ppprstg);
        HRESULT (  *Open )(
            IPropertySetStorage * This,
              const IID * const rfmtid,
             DWORD grfMode,
              IPropertyStorage **ppprstg);
        HRESULT (  *Delete )(
            IPropertySetStorage * This,
              const IID * const rfmtid);
        HRESULT (  *Enum )(
            IPropertySetStorage * This,
              IEnumSTATPROPSETSTG **ppenum);
    } IPropertySetStorageVtbl;
    struct IPropertySetStorage
    {
         struct IPropertySetStorageVtbl *lpVtbl;
    };
typedef    IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
extern const IID IID_IEnumSTATPROPSTG;
    typedef struct IEnumSTATPROPSTGVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumSTATPROPSTG * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumSTATPROPSTG * This);
        ULONG (  *Release )(
            IEnumSTATPROPSTG * This);
         HRESULT (  *Next )(
            IEnumSTATPROPSTG * This,
             ULONG celt,
             STATPROPSTG *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumSTATPROPSTG * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumSTATPROPSTG * This);
        HRESULT (  *Clone )(
            IEnumSTATPROPSTG * This,
              IEnumSTATPROPSTG **ppenum);
    } IEnumSTATPROPSTGVtbl;
    struct IEnumSTATPROPSTG
    {
         struct IEnumSTATPROPSTGVtbl *lpVtbl;
    };
 HRESULT  IEnumSTATPROPSTG_RemoteNext_Proxy(
    IEnumSTATPROPSTG * This,
     ULONG celt,
      STATPROPSTG *rgelt,
      ULONG *pceltFetched);
void  IEnumSTATPROPSTG_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
extern const IID IID_IEnumSTATPROPSETSTG;
    typedef struct IEnumSTATPROPSETSTGVtbl
    {
        HRESULT (  *QueryInterface )(
            IEnumSTATPROPSETSTG * This,
              const IID * const riid,
              void **ppvObject);
        ULONG (  *AddRef )(
            IEnumSTATPROPSETSTG * This);
        ULONG (  *Release )(
            IEnumSTATPROPSETSTG * This);
         HRESULT (  *Next )(
            IEnumSTATPROPSETSTG * This,
             ULONG celt,
             STATPROPSETSTG *rgelt,
             ULONG *pceltFetched);
        HRESULT (  *Skip )(
            IEnumSTATPROPSETSTG * This,
             ULONG celt);
        HRESULT (  *Reset )(
            IEnumSTATPROPSETSTG * This);
        HRESULT (  *Clone )(
            IEnumSTATPROPSETSTG * This,
              IEnumSTATPROPSETSTG **ppenum);
    } IEnumSTATPROPSETSTGVtbl;
    struct IEnumSTATPROPSETSTG
    {
         struct IEnumSTATPROPSETSTGVtbl *lpVtbl;
    };
 HRESULT  IEnumSTATPROPSETSTG_RemoteNext_Proxy(
    IEnumSTATPROPSETSTG * This,
     ULONG celt,
      STATPROPSETSTG *rgelt,
      ULONG *pceltFetched);
void  IEnumSTATPROPSETSTG_RemoteNext_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
typedef    IPropertyStorage *LPPROPERTYSTORAGE;
extern  HRESULT  PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );
extern  HRESULT  PropVariantClear ( PROPVARIANT * pvar );
extern  HRESULT  FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );
extern  HRESULT  StgCreatePropStg( IUnknown* pUnk, const IID * const fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
extern  HRESULT  StgOpenPropStg( IUnknown* pUnk, const IID * const fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
extern  HRESULT  StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);
 extern  HRESULT  FmtIdToPropStgName( const FMTID *pfmtid,  LPOLESTR oszName );
extern  HRESULT  PropStgNameToFmtId(   const LPOLESTR oszName, FMTID *pfmtid );
typedef struct tagSERIALIZEDPROPERTYVALUE
{
    DWORD	dwType;
    BYTE	rgb[1];
} SERIALIZEDPROPERTYVALUE;
extern SERIALIZEDPROPERTYVALUE*
StgConvertVariantToProperty(
             const PROPVARIANT* pvar,
            USHORT CodePage,
             SERIALIZEDPROPERTYVALUE* pprop,
             ULONG* pcb,
            PROPID pid,
             BOOLEAN fReserved,
             ULONG* pcIndirect);
extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_s_ifspec;
unsigned long               BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree(     unsigned long *, BSTR * );
unsigned long               LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * );
unsigned char *   LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * );
unsigned char *   LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * );
void                        LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * );
unsigned long               BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * );
unsigned char *   BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * );
unsigned char *   BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * );
void                        BSTR_UserFree64(     unsigned long *, BSTR * );
unsigned long               LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * );
unsigned char *   LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * );
unsigned char *   LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * );
void                        LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * );
 HRESULT  IEnumSTATPROPSTG_Next_Proxy(
    IEnumSTATPROPSTG * This,
     ULONG celt,
     STATPROPSTG *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumSTATPROPSTG_Next_Stub(
    IEnumSTATPROPSTG * This,
     ULONG celt,
      STATPROPSTG *rgelt,
      ULONG *pceltFetched);
 HRESULT  IEnumSTATPROPSETSTG_Next_Proxy(
    IEnumSTATPROPSETSTG * This,
     ULONG celt,
     STATPROPSETSTG *rgelt,
     ULONG *pceltFetched);
 HRESULT  IEnumSTATPROPSETSTG_Next_Stub(
    IEnumSTATPROPSETSTG * This,
     ULONG celt,
      STATPROPSETSTG *rgelt,
      ULONG *pceltFetched);
extern  HRESULT  CreateStdProgressIndicator( HWND hwndParent,
                                    LPCOLESTR pszTitle,
                                    IBindStatusCallback * pIbscCaller,
                                    IBindStatusCallback ** ppIbsc);
extern const IID IID_StdOle;
extern  BSTR  SysAllocString( const OLECHAR * psz);
extern  INT   SysReAllocString( BSTR* pbstr,  const OLECHAR* psz);
extern  BSTR  SysAllocStringLen( const OLECHAR * strIn, UINT ui);
 extern  INT   SysReAllocStringLen( BSTR* pbstr,  const OLECHAR* psz,  unsigned int len);
extern  void  SysFreeString( BSTR bstrString);
extern  UINT  SysStringLen( BSTR);
extern  UINT  SysStringByteLen( BSTR bstr);
extern  BSTR  SysAllocStringByteLen( LPCSTR psz,  UINT len);
extern  INT  DosDateTimeToVariantTime( USHORT wDosDate,  USHORT wDosTime,  DOUBLE * pvtime);
extern  INT  VariantTimeToDosDateTime( DOUBLE vtime,  USHORT * pwDosDate,  USHORT * pwDosTime);
extern  INT  SystemTimeToVariantTime( LPSYSTEMTIME lpSystemTime,  DOUBLE *pvtime);
extern  INT  VariantTimeToSystemTime( DOUBLE vtime,  LPSYSTEMTIME lpSystemTime);
extern  HRESULT  SafeArrayAllocDescriptor( UINT cDims,  SAFEARRAY ** ppsaOut);
extern  HRESULT  SafeArrayAllocDescriptorEx( VARTYPE vt,  UINT cDims,  SAFEARRAY ** ppsaOut);
extern  HRESULT  SafeArrayAllocData( SAFEARRAY * psa);
extern  SAFEARRAY *  SafeArrayCreate( VARTYPE vt,  UINT cDims,  SAFEARRAYBOUND * rgsabound);
extern  SAFEARRAY *  SafeArrayCreateEx( VARTYPE vt,  UINT cDims,  SAFEARRAYBOUND * rgsabound,  PVOID pvExtra);
extern  HRESULT  SafeArrayCopyData( SAFEARRAY *psaSource,  SAFEARRAY *psaTarget);
extern  HRESULT  SafeArrayDestroyDescriptor( SAFEARRAY * psa);
extern  HRESULT  SafeArrayDestroyData( SAFEARRAY * psa);
extern  HRESULT  SafeArrayDestroy( SAFEARRAY * psa);
extern  HRESULT  SafeArrayRedim( SAFEARRAY * psa,  SAFEARRAYBOUND * psaboundNew);
extern  UINT  SafeArrayGetDim( SAFEARRAY * psa);
extern  UINT  SafeArrayGetElemsize( SAFEARRAY * psa);
extern  HRESULT  SafeArrayGetUBound( SAFEARRAY * psa,  UINT nDim,  LONG * plUbound);
extern  HRESULT  SafeArrayGetLBound( SAFEARRAY * psa,  UINT nDim,  LONG * plLbound);
extern  HRESULT  SafeArrayLock( SAFEARRAY * psa);
extern  HRESULT  SafeArrayUnlock( SAFEARRAY * psa);
extern  HRESULT  SafeArrayAccessData( SAFEARRAY * psa,  void ** ppvData);
extern  HRESULT  SafeArrayUnaccessData( SAFEARRAY * psa);
extern  HRESULT  SafeArrayGetElement( SAFEARRAY * psa,  LONG * rgIndices,  void * pv);
extern  HRESULT  SafeArrayPutElement( SAFEARRAY * psa,  LONG * rgIndices,  void * pv);
extern  HRESULT  SafeArrayCopy( SAFEARRAY * psa,  SAFEARRAY ** ppsaOut);
extern  HRESULT  SafeArrayPtrOfIndex( SAFEARRAY * psa,  LONG * rgIndices,  void ** ppvData);
extern  HRESULT  SafeArraySetRecordInfo( SAFEARRAY * psa,  IRecordInfo * prinfo);
extern  HRESULT  SafeArrayGetRecordInfo( SAFEARRAY * psa,  IRecordInfo ** prinfo);
extern  HRESULT  SafeArraySetIID( SAFEARRAY * psa,  const GUID * const guid);
extern  HRESULT  SafeArrayGetIID( SAFEARRAY * psa,  GUID * pguid);
extern  HRESULT  SafeArrayGetVartype( SAFEARRAY * psa,  VARTYPE * pvt);
extern  SAFEARRAY *  SafeArrayCreateVector( VARTYPE vt,  LONG lLbound,  ULONG cElements);
extern  SAFEARRAY *  SafeArrayCreateVectorEx( VARTYPE vt,  LONG lLbound,  ULONG cElements,  PVOID pvExtra);
extern  void  VariantInit( VARIANTARG * pvarg);
extern  HRESULT  VariantClear( VARIANTARG * pvarg);
extern  HRESULT  VariantCopy( VARIANTARG * pvargDest,  const VARIANTARG * pvargSrc);
extern  HRESULT  VariantCopyInd( VARIANT * pvarDest,  const VARIANTARG * pvargSrc);
extern  HRESULT  VariantChangeType( VARIANTARG * pvargDest,
                const VARIANTARG * pvarSrc,  USHORT wFlags,  VARTYPE vt);
extern  HRESULT  VariantChangeTypeEx( VARIANTARG * pvargDest,
                const VARIANTARG * pvarSrc,  LCID lcid,  USHORT wFlags,  VARTYPE vt);
extern  HRESULT  VectorFromBstr ( BSTR bstr,  SAFEARRAY ** ppsa);
extern  HRESULT  BstrFromVector ( SAFEARRAY *psa,  BSTR *pbstr);
extern  HRESULT  VarUI1FromI2(SHORT sIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromI4(LONG lIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromI8(LONG64 i64In,  BYTE * pbOut);
extern  HRESULT  VarUI1FromR4(FLOAT fltIn, BYTE * pbOut);
extern  HRESULT  VarUI1FromR8(DOUBLE dblIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromCy(CY cyIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromDate(DATE dateIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  BYTE * pbOut);
extern  HRESULT  VarUI1FromDisp(IDispatch * pdispIn, LCID lcid,  BYTE * pbOut);
extern  HRESULT  VarUI1FromBool(VARIANT_BOOL boolIn,  BYTE * pbOut);
extern  HRESULT  VarUI1FromI1(CHAR cIn,  BYTE *pbOut);
extern  HRESULT  VarUI1FromUI2(USHORT uiIn,  BYTE *pbOut);
extern  HRESULT  VarUI1FromUI4(ULONG ulIn,  BYTE *pbOut);
extern  HRESULT  VarUI1FromUI8(ULONG64 ui64In,  BYTE * pbOut);
extern  HRESULT  VarUI1FromDec( const DECIMAL *pdecIn,  BYTE *pbOut);
extern  HRESULT  VarI2FromUI1(BYTE bIn,  SHORT * psOut);
extern  HRESULT  VarI2FromI4(LONG lIn,  SHORT * psOut);
extern  HRESULT  VarI2FromI8(LONG64 i64In,  SHORT * psOut);
extern  HRESULT  VarI2FromR4(FLOAT fltIn,  SHORT * psOut);
extern  HRESULT  VarI2FromR8(DOUBLE dblIn,  SHORT * psOut);
extern  HRESULT  VarI2FromCy(CY cyIn, SHORT * psOut);
extern  HRESULT  VarI2FromDate(DATE dateIn,  SHORT * psOut);
extern  HRESULT  VarI2FromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  SHORT * psOut);
extern  HRESULT  VarI2FromDisp(IDispatch * pdispIn, LCID lcid,  SHORT * psOut);
extern  HRESULT  VarI2FromBool(VARIANT_BOOL boolIn,  SHORT * psOut);
extern  HRESULT  VarI2FromI1(CHAR cIn,  SHORT *psOut);
extern  HRESULT  VarI2FromUI2(USHORT uiIn,  SHORT *psOut);
extern  HRESULT  VarI2FromUI4(ULONG ulIn,  SHORT *psOut);
extern  HRESULT  VarI2FromUI8(ULONG64 ui64In,  SHORT * psOut);
extern  HRESULT  VarI2FromDec( const DECIMAL *pdecIn,  SHORT *psOut);
extern  HRESULT  VarI4FromUI1(BYTE bIn,  LONG * plOut);
extern  HRESULT  VarI4FromI2(SHORT sIn,  LONG * plOut);
extern  HRESULT  VarI4FromI8(LONG64 i64In,  LONG * plOut);
extern  HRESULT  VarI4FromR4(FLOAT fltIn,  LONG * plOut);
extern  HRESULT  VarI4FromR8(DOUBLE dblIn,  LONG * plOut);
extern  HRESULT  VarI4FromCy(CY cyIn,  LONG * plOut);
extern  HRESULT  VarI4FromDate(DATE dateIn,  LONG * plOut);
extern  HRESULT  VarI4FromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  LONG * plOut);
extern  HRESULT  VarI4FromDisp(IDispatch * pdispIn,  LCID lcid,  LONG * plOut);
extern  HRESULT  VarI4FromBool(VARIANT_BOOL boolIn,  LONG * plOut);
extern  HRESULT  VarI4FromI1(CHAR cIn,  LONG *plOut);
extern  HRESULT  VarI4FromUI2(USHORT uiIn,  LONG *plOut);
extern  HRESULT  VarI4FromUI4(ULONG ulIn,  LONG *plOut);
extern  HRESULT  VarI4FromUI8(ULONG64 ui64In,  LONG * plOut);
extern  HRESULT  VarI4FromDec( const DECIMAL *pdecIn,  LONG *plOut);
extern  HRESULT  VarI4FromInt(INT intIn,  LONG *plOut);
extern  HRESULT  VarI8FromUI1(BYTE bIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromI2(SHORT sIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromI4(LONG lIn, LONG64 * pi64Out);
extern  HRESULT  VarI8FromR4(FLOAT fltIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromR8(DOUBLE dblIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromCy( CY cyIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromDate(DATE dateIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromStr( LPCOLESTR strIn,  LCID lcid,  unsigned long dwFlags,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromDisp(IDispatch * pdispIn,  LCID lcid,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromBool(VARIANT_BOOL boolIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromI1(CHAR cIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromUI2(USHORT uiIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromUI4(ULONG ulIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromUI8(ULONG64 ui64In,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromDec( const DECIMAL *pdecIn,  LONG64 * pi64Out);
extern  HRESULT  VarI8FromInt(INT intIn, LONG64 * pi64Out);
extern  HRESULT  VarR4FromUI1(BYTE bIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromI2(SHORT sIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromI4(LONG lIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromI8(LONG64 i64In,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromR8(DOUBLE dblIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromCy(CY cyIn, FLOAT * pfltOut);
extern  HRESULT  VarR4FromDate(DATE dateIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  FLOAT *pfltOut);
extern  HRESULT  VarR4FromDisp(IDispatch * pdispIn, LCID lcid,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromBool(VARIANT_BOOL boolIn,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromI1(CHAR cIn,  FLOAT *pfltOut);
extern  HRESULT  VarR4FromUI2(USHORT uiIn,  FLOAT *pfltOut);
extern  HRESULT  VarR4FromUI4(ULONG ulIn,  FLOAT *pfltOut);
extern  HRESULT  VarR4FromUI8(ULONG64 ui64In,  FLOAT * pfltOut);
extern  HRESULT  VarR4FromDec( const DECIMAL *pdecIn,  FLOAT *pfltOut);
extern  HRESULT  VarR8FromUI1(BYTE bIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromI2(SHORT sIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromI4(LONG lIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromI8(LONG64 i64In,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromR4(FLOAT fltIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromCy(CY cyIn, DOUBLE * pdblOut);
extern  HRESULT  VarR8FromDate(DATE dateIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  DOUBLE *pdblOut);
extern  HRESULT  VarR8FromDisp(IDispatch * pdispIn, LCID lcid,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromBool(VARIANT_BOOL boolIn,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromI1(CHAR cIn, DOUBLE *pdblOut);
extern  HRESULT  VarR8FromUI2(USHORT uiIn,  DOUBLE *pdblOut);
extern  HRESULT  VarR8FromUI4(ULONG ulIn,  DOUBLE *pdblOut);
extern  HRESULT  VarR8FromUI8(ULONG64 ui64In,  DOUBLE * pdblOut);
extern  HRESULT  VarR8FromDec( const DECIMAL *pdecIn,  DOUBLE *pdblOut);
extern  HRESULT  VarDateFromUI1(BYTE bIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromI2(SHORT sIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromI4(LONG lIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromI8(LONG64 i64In,  DATE * pdateOut);
extern  HRESULT  VarDateFromR4(FLOAT fltIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromR8(DOUBLE dblIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromCy(CY cyIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,  DATE *pdateOut);
extern  HRESULT  VarDateFromDisp(IDispatch * pdispIn, LCID lcid,  DATE * pdateOut);
extern  HRESULT  VarDateFromBool(VARIANT_BOOL boolIn,  DATE * pdateOut);
extern  HRESULT  VarDateFromI1(CHAR cIn,  DATE *pdateOut);
extern  HRESULT  VarDateFromUI2(USHORT uiIn,  DATE *pdateOut);
extern  HRESULT  VarDateFromUI4(ULONG ulIn,  DATE *pdateOut);
extern  HRESULT  VarDateFromUI8(ULONG64 ui64In,  DATE * pdateOut);
extern  HRESULT  VarDateFromDec( const DECIMAL *pdecIn,  DATE *pdateOut);
extern  HRESULT  VarCyFromUI1(BYTE bIn,  CY * pcyOut);
extern  HRESULT  VarCyFromI2(SHORT sIn,  CY * pcyOut);
extern  HRESULT  VarCyFromI4(LONG lIn,  CY * pcyOut);
extern  HRESULT  VarCyFromI8(LONG64 i64In,  CY * pcyOut);
extern  HRESULT  VarCyFromR4(FLOAT fltIn,  CY * pcyOut);
extern  HRESULT  VarCyFromR8(DOUBLE dblIn,  CY * pcyOut);
extern  HRESULT  VarCyFromDate(DATE dateIn,  CY * pcyOut);
extern  HRESULT  VarCyFromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,  CY * pcyOut);
extern  HRESULT  VarCyFromDisp( IDispatch * pdispIn, LCID lcid,  CY * pcyOut);
extern  HRESULT  VarCyFromBool(VARIANT_BOOL boolIn,  CY * pcyOut);
extern  HRESULT  VarCyFromI1(CHAR cIn,  CY *pcyOut);
extern  HRESULT  VarCyFromUI2(USHORT uiIn,  CY *pcyOut);
extern  HRESULT  VarCyFromUI4(ULONG ulIn,  CY *pcyOut);
extern  HRESULT  VarCyFromUI8(ULONG64 ui64In,  CY * pcyOut);
extern  HRESULT  VarCyFromDec( const DECIMAL *pdecIn,  CY *pcyOut);
extern  HRESULT  VarBstrFromUI1(BYTE bVal, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromI2(SHORT iVal, LCID lcid, ULONG dwFlags, BSTR * pbstrOut);
extern  HRESULT  VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromI8(LONG64 i64In, LCID lcid, unsigned long dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromR8(DOUBLE dblIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromDate( DATE dateIn,  LCID lcid,  ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromDisp(IDispatch * pdispIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromI1(CHAR cIn, LCID lcid, ULONG dwFlags,  BSTR *pbstrOut);
extern  HRESULT  VarBstrFromUI2(USHORT uiIn, LCID lcid, ULONG dwFlags,  BSTR *pbstrOut);
extern  HRESULT  VarBstrFromUI4(ULONG ulIn, LCID lcid, ULONG dwFlags,  BSTR *pbstrOut);
extern  HRESULT  VarBstrFromUI8(ULONG64 ui64In, LCID lcid, unsigned long dwFlags,  BSTR * pbstrOut);
extern  HRESULT  VarBstrFromDec( const DECIMAL *pdecIn,  LCID lcid,  ULONG dwFlags,  BSTR *pbstrOut);
extern  HRESULT  VarBoolFromUI1(BYTE bIn,  VARIANT_BOOL * pboolOut);
 extern  HRESULT  VarBoolFromI2( SHORT sIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromI4(LONG lIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromI8(LONG64 i64In,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromR4(FLOAT fltIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromR8(DOUBLE dblIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromDate(DATE dateIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromCy(CY cyIn,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromStr( LPCOLESTR strIn, LCID lcid, ULONG dwFlags,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromDisp(IDispatch * pdispIn, LCID lcid,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromI1(CHAR cIn,  VARIANT_BOOL *pboolOut);
extern  HRESULT  VarBoolFromUI2(USHORT uiIn,  VARIANT_BOOL *pboolOut);
extern  HRESULT  VarBoolFromUI4(ULONG ulIn,  VARIANT_BOOL *pboolOut);
extern  HRESULT  VarBoolFromUI8(ULONG64 i64In,  VARIANT_BOOL * pboolOut);
extern  HRESULT  VarBoolFromDec( const DECIMAL *pdecIn,  VARIANT_BOOL *pboolOut);
extern  HRESULT
VarI1FromUI1(
     BYTE bIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromI2(
     SHORT uiIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromI4(
     LONG lIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromI8(
     LONG64 i64In,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromR4(
     FLOAT fltIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromR8(
     DOUBLE dblIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromDate(
     DATE dateIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromCy(
     CY cyIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromStr(
     LPCOLESTR strIn,
     LCID lcid,
     ULONG dwFlags,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromDisp(
     IDispatch *pdispIn,
     LCID lcid,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromBool(
     VARIANT_BOOL boolIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromUI2(
     USHORT uiIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromUI4(
     ULONG ulIn,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromUI8(
     ULONG64 i64In,
     CHAR *pcOut
    );
extern  HRESULT
VarI1FromDec(
     const DECIMAL *pdecIn,
     CHAR *pcOut
    );
extern  HRESULT  VarUI2FromUI1(BYTE bIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromI2(SHORT uiIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromI4(LONG lIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromI8(LONG64 i64In,  USHORT *puiOut);
extern  HRESULT  VarUI2FromR4(FLOAT fltIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromR8(DOUBLE dblIn, USHORT *puiOut);
extern  HRESULT  VarUI2FromDate(DATE dateIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromCy(CY cyIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,  USHORT *puiOut);
extern  HRESULT  VarUI2FromDisp( IDispatch *pdispIn, LCID lcid,  USHORT *puiOut);
extern  HRESULT  VarUI2FromBool(VARIANT_BOOL boolIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromI1(CHAR cIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromUI4(ULONG ulIn,  USHORT *puiOut);
extern  HRESULT  VarUI2FromUI8(ULONG64 i64In,  USHORT *puiOut);
extern  HRESULT  VarUI2FromDec( const DECIMAL *pdecIn,  USHORT *puiOut);
extern  HRESULT  VarUI4FromUI1(BYTE bIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromI2( SHORT uiIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromI4(LONG lIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromI8(LONG64 i64In,  ULONG *plOut);
extern  HRESULT  VarUI4FromR4(FLOAT fltIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromR8(DOUBLE dblIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromDate(DATE dateIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromCy(CY cyIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,  ULONG *pulOut);
extern  HRESULT  VarUI4FromDisp( IDispatch *pdispIn, LCID lcid,  ULONG *pulOut);
extern  HRESULT  VarUI4FromBool(VARIANT_BOOL boolIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromI1(CHAR cIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromUI2(USHORT uiIn,  ULONG *pulOut);
extern  HRESULT  VarUI4FromUI8(ULONG64 ui64In,  ULONG *plOut);
extern  HRESULT  VarUI4FromDec( const DECIMAL *pdecIn,  ULONG *pulOut);
extern  HRESULT  VarUI8FromUI1(BYTE bIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromI2(SHORT sIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromI4(LONG lIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromI8(LONG64 ui64In,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromR4(FLOAT fltIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromR8(DOUBLE dblIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromCy(CY cyIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromDate(DATE dateIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromStr( LPCOLESTR strIn,  LCID lcid,  unsigned long dwFlags,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromDisp( IDispatch * pdispIn, LCID lcid,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromBool(VARIANT_BOOL boolIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromI1(CHAR cIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromUI2(USHORT uiIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromUI4(ULONG ulIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromDec( const DECIMAL *pdecIn,  ULONG64 * pi64Out);
extern  HRESULT  VarUI8FromInt(INT intIn, ULONG64 * pi64Out);
extern  HRESULT  VarDecFromUI1( BYTE bIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromI2( SHORT uiIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromI4( LONG lIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromI8(LONG64 i64In,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromR4( FLOAT fltIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromR8( DOUBLE dblIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromDate( DATE dateIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromCy( CY cyIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromDisp( IDispatch *pdispIn,  LCID lcid,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromBool( VARIANT_BOOL boolIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromI1( CHAR cIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromUI2( USHORT uiIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromUI4( ULONG ulIn,  DECIMAL *pdecOut);
extern  HRESULT  VarDecFromUI8(ULONG64 ui64In,  DECIMAL *pdecOut);
extern  HRESULT  VarI4FromI8(LONG64 i64In, LONG *plOut);
extern  HRESULT  VarI4FromUI8(ULONG64 ui64In, LONG *plOut);
typedef struct {
    INT   cDig;
    ULONG dwInFlags;
    ULONG dwOutFlags;
    INT   cchUsed;
    INT   nBaseShift;
    INT   nPwr10;
} NUMPARSE;
extern  HRESULT  VarParseNumFromStr( LPCOLESTR strIn,  LCID lcid,  ULONG dwFlags,
             NUMPARSE * pnumprs,  BYTE * rgbDig);
extern  HRESULT  VarNumFromParseNum( NUMPARSE * pnumprs,  BYTE * rgbDig,
             ULONG dwVtBits,  VARIANT * pvar);
extern HRESULT  VarAdd( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarAnd( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarCat( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarDiv( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarEqv( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarIdiv( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarImp( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarMod( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarMul( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarOr( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarPow( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarSub( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarXor( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LPVARIANT pvarResult);
extern HRESULT  VarAbs( LPVARIANT pvarIn,  LPVARIANT pvarResult);
extern HRESULT  VarFix( LPVARIANT pvarIn,  LPVARIANT pvarResult);
extern HRESULT  VarInt( LPVARIANT pvarIn,  LPVARIANT pvarResult);
extern HRESULT  VarNeg( LPVARIANT pvarIn,  LPVARIANT pvarResult);
extern HRESULT  VarNot( LPVARIANT pvarIn,  LPVARIANT pvarResult);
extern HRESULT  VarRound( LPVARIANT pvarIn,  int cDecimals,  LPVARIANT pvarResult);
extern HRESULT  VarCmp( LPVARIANT pvarLeft,  LPVARIANT pvarRight,  LCID lcid,  ULONG dwFlags);
extern HRESULT  VarDecAdd( LPDECIMAL pdecLeft,  LPDECIMAL pdecRight,  LPDECIMAL pdecResult);
extern HRESULT  VarDecDiv( LPDECIMAL pdecLeft,  LPDECIMAL pdecRight,  LPDECIMAL pdecResult);
extern HRESULT  VarDecMul( LPDECIMAL pdecLeft,  LPDECIMAL pdecRight,  LPDECIMAL pdecResult);
extern HRESULT  VarDecSub( LPDECIMAL pdecLeft,  LPDECIMAL pdecRight,  LPDECIMAL pdecResult);
extern HRESULT  VarDecAbs( LPDECIMAL pdecIn,  LPDECIMAL pdecResult);
extern HRESULT  VarDecFix( LPDECIMAL pdecIn,  LPDECIMAL pdecResult);
extern HRESULT  VarDecInt( LPDECIMAL pdecIn,  LPDECIMAL pdecResult);
extern HRESULT  VarDecNeg( LPDECIMAL pdecIn,  LPDECIMAL pdecResult);
extern HRESULT  VarDecRound( LPDECIMAL pdecIn, int cDecimals,  LPDECIMAL pdecResult);
extern HRESULT  VarDecCmp( LPDECIMAL pdecLeft,  LPDECIMAL pdecRight);
extern HRESULT  VarDecCmpR8( LPDECIMAL pdecLeft,  double dblRight);
extern HRESULT  VarCyAdd( CY cyLeft,  CY cyRight,  LPCY pcyResult);
extern HRESULT  VarCyMul( CY cyLeft,  CY cyRight,  LPCY pcyResult);
extern HRESULT  VarCyMulI4( CY cyLeft,  long lRight,  LPCY pcyResult);
extern HRESULT  VarCyMulI8( CY cyLeft,  LONG64 lRight,  LPCY pcyResult);
extern HRESULT  VarCySub( CY cyLeft,  CY cyRight,  LPCY pcyResult);
extern HRESULT  VarCyAbs( CY cyIn,  LPCY pcyResult);
extern HRESULT  VarCyFix( CY cyIn,  LPCY pcyResult);
extern HRESULT  VarCyInt( CY cyIn,  LPCY pcyResult);
extern HRESULT  VarCyNeg( CY cyIn,  LPCY pcyResult);
extern HRESULT  VarCyRound( CY cyIn,  int cDecimals,  LPCY pcyResult);
extern HRESULT  VarCyCmp( CY cyLeft,  CY cyRight);
extern HRESULT  VarCyCmpR8( CY cyLeft,  double dblRight);
extern HRESULT  VarBstrCat( BSTR bstrLeft,  BSTR bstrRight,  LPBSTR pbstrResult);
extern HRESULT  VarBstrCmp( BSTR bstrLeft,  BSTR bstrRight,  LCID lcid,  ULONG dwFlags);
extern HRESULT  VarR8Pow( double dblLeft,  double dblRight,  double *pdblResult);
extern HRESULT  VarR4CmpR8( float fltLeft,  double dblRight);
extern HRESULT  VarR8Round( double dblIn,  int cDecimals,  double *pdblResult);
typedef struct {
    SYSTEMTIME st;
    USHORT  wDayOfYear;
} UDATE;
extern  HRESULT  VarDateFromUdate( UDATE *pudateIn,  ULONG dwFlags,  DATE *pdateOut);
extern  HRESULT  VarDateFromUdateEx( UDATE *pudateIn,  LCID lcid,  ULONG dwFlags,  DATE *pdateOut);
extern  HRESULT  VarUdateFromDate( DATE dateIn,  ULONG dwFlags,  UDATE *pudateOut);
extern  HRESULT  GetAltMonthNames(LCID lcid,  LPOLESTR * * prgp);
extern  HRESULT  VarFormat(
	 LPVARIANT pvarIn,
	 LPOLESTR pstrFormat,
	int iFirstDay,
	int iFirstWeek,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarFormatDateTime(
	 LPVARIANT pvarIn,
	int iNamedFormat,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarFormatNumber(
	 LPVARIANT pvarIn,
	int iNumDig,
	int iIncLead,
	int iUseParens,
	int iGroup,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarFormatPercent(
	 LPVARIANT pvarIn,
	int iNumDig,
	int iIncLead,
	int iUseParens,
	int iGroup,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarFormatCurrency(
	 LPVARIANT pvarIn,
	int iNumDig,
	int iIncLead,
	int iUseParens,
	int iGroup,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarWeekdayName(
	int iWeekday,
	int fAbbrev,
	int iFirstDay,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarMonthName(
	int iMonth,
	int fAbbrev,
	ULONG dwFlags,
	 BSTR *pbstrOut
	);
extern  HRESULT  VarFormatFromTokens(
	 LPVARIANT pvarIn,
	 LPOLESTR pstrFormat,
	LPBYTE pbTokCur,
	ULONG dwFlags,
	 BSTR *pbstrOut,
	LCID lcid
	);
extern  HRESULT  VarTokenizeFormatString(
	 LPOLESTR pstrFormat,
	 LPBYTE rgbTok,
	int cbTok,
	int iFirstDay,
	int iFirstWeek,
	LCID lcid,
	 int *pcbActual
	);
typedef ITypeLib * LPTYPELIB;
typedef LONG DISPID;
typedef DISPID MEMBERID;
typedef ITypeInfo * LPTYPEINFO;
typedef ITypeComp * LPTYPECOMP;
typedef ICreateTypeLib * LPCREATETYPELIB;
typedef ICreateTypeInfo * LPCREATETYPEINFO;
extern  ULONG  LHashValOfNameSysA(SYSKIND syskind, LCID lcid,
            LPCSTR szName);
extern  ULONG
LHashValOfNameSys(SYSKIND syskind, LCID lcid, const OLECHAR * szName);
extern  HRESULT  LoadTypeLib( LPCOLESTR szFile, ITypeLib ** pptlib);
typedef enum tagREGKIND
{
    REGKIND_DEFAULT,
    REGKIND_REGISTER,
    REGKIND_NONE
} REGKIND;
extern  HRESULT  LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind,
            ITypeLib ** pptlib);
extern  HRESULT  LoadRegTypeLib(const GUID * const rguid, WORD wVerMajor, WORD wVerMinor,
            LCID lcid, ITypeLib ** pptlib);
extern  HRESULT  QueryPathOfRegTypeLib(const GUID * const guid, USHORT wMaj, USHORT wMin,
            LCID lcid,  LPBSTR lpbstrPathName);
extern  HRESULT  RegisterTypeLib(ITypeLib * ptlib,  LPCOLESTR szFullPath,
             LPCOLESTR szHelpDir);
extern  HRESULT  UnRegisterTypeLib(const GUID * const libID, WORD wVerMajor,
            WORD wVerMinor, LCID lcid, SYSKIND syskind);
extern  HRESULT  RegisterTypeLibForUser(ITypeLib *ptlib, OLECHAR  *szFullPath,
			 OLECHAR  *szHelpDir);
extern  HRESULT  UnRegisterTypeLibForUser(
    const GUID * const         libID,
    WORD   wMajorVerNum,
    WORD   wMinorVerNum,
    LCID            lcid,
    SYSKIND         syskind);
extern  HRESULT  CreateTypeLib(SYSKIND syskind, LPCOLESTR szFile,
            ICreateTypeLib ** ppctlib);
extern  HRESULT  CreateTypeLib2(SYSKIND syskind, LPCOLESTR szFile,
            ICreateTypeLib2 **ppctlib);
typedef IDispatch * LPDISPATCH;
typedef struct tagPARAMDATA {
    OLECHAR * szName;
    VARTYPE vt;
} PARAMDATA, * LPPARAMDATA;
typedef struct tagMETHODDATA {
    OLECHAR * szName;
    PARAMDATA * ppdata;
    DISPID dispid;
    UINT iMeth;
    CALLCONV cc;
    UINT cArgs;
    WORD wFlags;
    VARTYPE vtReturn;
} METHODDATA, * LPMETHODDATA;
typedef struct tagINTERFACEDATA {
    METHODDATA * pmethdata;
    UINT cMembers;
} INTERFACEDATA, * LPINTERFACEDATA;
extern  HRESULT  DispGetParam(
	 DISPPARAMS * pdispparams,
	UINT position,
	VARTYPE vtTarg,
	 VARIANT * pvarResult,
	 UINT * puArgErr
	);
 extern  HRESULT  DispGetIDsOfNames(ITypeInfo * ptinfo,  OLECHAR ** rgszNames,
            UINT cNames,  DISPID * rgdispid);
extern  HRESULT  DispInvoke(void * _this, ITypeInfo * ptinfo, DISPID dispidMember,
            WORD wFlags, DISPPARAMS * pparams, VARIANT * pvarResult,
            EXCEPINFO * pexcepinfo, UINT * puArgErr);
extern  HRESULT  CreateDispTypeInfo(INTERFACEDATA * pidata, LCID lcid,
            ITypeInfo ** pptinfo);
extern  HRESULT  CreateStdDispatch(IUnknown * punkOuter, void * pvThis,
            ITypeInfo * ptinfo, IUnknown ** ppunkStdDisp);
extern  HRESULT  DispCallFunc(void * pvInstance, ULONG_PTR oVft, CALLCONV cc,
            VARTYPE vtReturn, UINT  cActuals, VARTYPE * prgvt,
            VARIANTARG ** prgpvarg, VARIANT * pvargResult);
extern  HRESULT  RegisterActiveObject(IUnknown * punk, const IID * const rclsid,
            DWORD dwFlags, DWORD * pdwRegister);
extern  HRESULT  RevokeActiveObject(DWORD dwRegister, void * pvReserved);
extern  HRESULT  GetActiveObject(const IID * const rclsid, void * pvReserved,
            IUnknown ** ppunk);
extern  HRESULT  SetErrorInfo( ULONG dwReserved,  IErrorInfo * perrinfo);
extern  HRESULT  GetErrorInfo( ULONG dwReserved,  IErrorInfo ** pperrinfo);
extern  HRESULT  CreateErrorInfo( ICreateErrorInfo ** pperrinfo);
extern  HRESULT  GetRecordInfoFromTypeInfo(ITypeInfo * pTypeInfo,
            IRecordInfo ** ppRecInfo);
extern  HRESULT  GetRecordInfoFromGuids(const GUID * const rGuidTypeLib,
            ULONG uVerMajor, ULONG uVerMinor, LCID lcid,
            const GUID * const rGuidTypeInfo, IRecordInfo ** ppRecInfo);
extern  ULONG  OaBuildVersion(void);
extern  void  ClearCustData(LPCUSTDATA pCustData);
extern  HRESULT  CreateDataAdviseHolder( LPDATAADVISEHOLDER * ppDAHolder);
extern  DWORD  OleBuildVersion( void );
extern  HRESULT  ReadClassStg( LPSTORAGE pStg,  CLSID * pclsid);
extern  HRESULT  WriteClassStg( LPSTORAGE pStg,  const IID * const rclsid);
extern  HRESULT  ReadClassStm( LPSTREAM pStm,  CLSID * pclsid);
extern  HRESULT  WriteClassStm( LPSTREAM pStm,  const IID * const rclsid);
 extern  HRESULT  WriteFmtUserTypeStg ( LPSTORAGE pstg,  CLIPFORMAT cf,  LPOLESTR lpszUserType);
extern  HRESULT  ReadFmtUserTypeStg ( LPSTORAGE pstg,  CLIPFORMAT * pcf,     LPOLESTR * lplpszUserType);
extern  HRESULT  OleInitialize( LPVOID pvReserved);
extern  void  OleUninitialize(void);
extern  HRESULT   OleQueryLinkFromData( LPDATAOBJECT pSrcDataObject);
extern  HRESULT   OleQueryCreateFromData( LPDATAOBJECT pSrcDataObject);
extern  HRESULT   OleCreate( const IID * const rclsid,  const IID * const riid,  DWORD renderopt,
                 LPFORMATETC pFormatEtc,  LPOLECLIENTSITE pClientSite,
                 LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateEx( const IID * const rclsid,  const IID * const riid,  DWORD dwFlags,
                 DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
                 LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
                 DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
                 LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateFromData( LPDATAOBJECT pSrcDataObj,  const IID * const riid,
                 DWORD renderopt,  LPFORMATETC pFormatEtc,
                 LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,
                 LPVOID * ppvObj);
extern  HRESULT   OleCreateFromDataEx( LPDATAOBJECT pSrcDataObj,  const IID * const riid,
                 DWORD dwFlags,  DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
                 LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
                 DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
                 LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateLinkFromData( LPDATAOBJECT pSrcDataObj,  const IID * const riid,
                 DWORD renderopt,  LPFORMATETC pFormatEtc,
                 LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,
                 LPVOID * ppvObj);
extern  HRESULT   OleCreateLinkFromDataEx( LPDATAOBJECT pSrcDataObj,  const IID * const riid,
                 DWORD dwFlags,  DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
                 LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
                  DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
                 LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateStaticFromData( LPDATAOBJECT pSrcDataObj,  const IID * const iid,
                 DWORD renderopt,  LPFORMATETC pFormatEtc,
                 LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,
                 LPVOID * ppvObj);
extern  HRESULT   OleCreateLink( LPMONIKER pmkLinkSrc,  const IID * const riid,
             DWORD renderopt,  LPFORMATETC lpFormatEtc,
             LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateLinkEx( LPMONIKER pmkLinkSrc,  const IID * const riid,
             DWORD dwFlags,  DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
             LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
             DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
             LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateLinkToFile( LPCOLESTR lpszFileName,  const IID * const riid,
             DWORD renderopt,  LPFORMATETC lpFormatEtc,
             LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateLinkToFileEx( LPCOLESTR lpszFileName,  const IID * const riid,
             DWORD dwFlags,  DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
             LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
             DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
             LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateFromFile( const IID * const rclsid,  LPCOLESTR lpszFileName,  const IID * const riid,
             DWORD renderopt,  LPFORMATETC lpFormatEtc,
             LPOLECLIENTSITE pClientSite,  LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleCreateFromFileEx( const IID * const rclsid,  LPCOLESTR lpszFileName,  const IID * const riid,
             DWORD dwFlags,  DWORD renderopt,  ULONG cFormats,  DWORD* rgAdvf,
             LPFORMATETC rgFormatEtc,  IAdviseSink * lpAdviseSink,
             DWORD * rgdwConnection,  LPOLECLIENTSITE pClientSite,
             LPSTORAGE pStg,  LPVOID * ppvObj);
extern  HRESULT   OleLoad( LPSTORAGE pStg,  const IID * const riid,  LPOLECLIENTSITE pClientSite,
             LPVOID * ppvObj);
extern  HRESULT   OleSave( LPPERSISTSTORAGE pPS,  LPSTORAGE pStg,  BOOL fSameAsLoad);
extern  HRESULT   OleLoadFromStream(  LPSTREAM pStm,  const IID * const iidInterface,  LPVOID * ppvObj);
extern  HRESULT   OleSaveToStream(  LPPERSISTSTREAM pPStm,  LPSTREAM pStm );
extern  HRESULT   OleSetContainedObject( LPUNKNOWN pUnknown,  BOOL fContained);
extern  HRESULT   OleNoteObjectVisible( LPUNKNOWN pUnknown,  BOOL fVisible);
extern  HRESULT   RegisterDragDrop( HWND hwnd,  LPDROPTARGET pDropTarget);
extern  HRESULT   RevokeDragDrop( HWND hwnd);
extern  HRESULT   DoDragDrop( LPDATAOBJECT pDataObj,  LPDROPSOURCE pDropSource,
             DWORD dwOKEffects,  LPDWORD pdwEffect);
extern  HRESULT   OleSetClipboard( LPDATAOBJECT pDataObj);
extern  HRESULT   OleGetClipboard( LPDATAOBJECT * ppDataObj);
extern  HRESULT   OleFlushClipboard(void);
extern  HRESULT   OleIsCurrentClipboard( LPDATAOBJECT pDataObj);
extern  HOLEMENU    OleCreateMenuDescriptor ( HMENU hmenuCombined,
                                 LPOLEMENUGROUPWIDTHS lpMenuWidths);
extern  HRESULT               OleSetMenuDescriptor ( HOLEMENU holemenu,  HWND hwndFrame,
                                 HWND hwndActiveObject,
                                 LPOLEINPLACEFRAME lpFrame,
                                 LPOLEINPLACEACTIVEOBJECT lpActiveObj);
extern  HRESULT               OleDestroyMenuDescriptor ( HOLEMENU holemenu);
extern  HRESULT               OleTranslateAccelerator ( LPOLEINPLACEFRAME lpFrame,
                             LPOLEINPLACEFRAMEINFO lpFrameInfo,  LPMSG lpmsg);
extern  HANDLE  OleDuplicateData ( HANDLE hSrc,  CLIPFORMAT cfFormat,
                         UINT uiFlags);
extern  HRESULT           OleDraw ( LPUNKNOWN pUnknown,  DWORD dwAspect,  HDC hdcDraw,
                     LPCRECT lprcBounds);
extern  HRESULT           OleRun( LPUNKNOWN pUnknown);
extern  BOOL    OleIsRunning( LPOLEOBJECT pObject);
extern  HRESULT           OleLockRunning( LPUNKNOWN pUnknown,  BOOL fLock,  BOOL fLastUnlockCloses);
extern  void    ReleaseStgMedium( LPSTGMEDIUM);
extern  HRESULT           CreateOleAdviseHolder( LPOLEADVISEHOLDER * ppOAHolder);
extern  HRESULT           OleCreateDefaultHandler( const IID * const clsid,  LPUNKNOWN pUnkOuter,
                     const IID * const riid,  LPVOID * lplpObj);
extern  HRESULT           OleCreateEmbeddingHelper( const IID * const clsid,  LPUNKNOWN pUnkOuter,
                     DWORD flags,  LPCLASSFACTORY pCF,
                     const IID * const riid,  LPVOID * lplpObj);
extern  BOOL    IsAccelerator( HACCEL hAccel,  int cAccelEntries,  LPMSG lpMsg,
                                         WORD * lpwCmd);
extern  HGLOBAL  OleGetIconOfFile( LPOLESTR lpszPath,  BOOL fUseFileAsLabel);
extern  HGLOBAL  OleGetIconOfClass( const IID * const rclsid,  LPOLESTR lpszLabel,
                                         BOOL fUseTypeAsLabel);
extern  HGLOBAL  OleMetafilePictFromIconAndLabel( HICON hIcon,  LPOLESTR lpszLabel,
                                         LPOLESTR lpszSourceFile,  UINT iIconIndex);
 extern  HRESULT                   OleRegGetUserType ( const IID * const clsid,  DWORD dwFormOfType,
                                         LPOLESTR * pszUserType);
extern  HRESULT                   OleRegGetMiscStatus     ( const IID * const clsid,  DWORD dwAspect,
                                         DWORD * pdwStatus);
extern  HRESULT                   OleRegEnumFormatEtc     ( const IID * const clsid,  DWORD dwDirection,
                                         LPENUMFORMATETC * ppenum);
extern  HRESULT                   OleRegEnumVerbs ( const IID * const clsid,  LPENUMOLEVERB * ppenum);
typedef struct _OLESTREAM *  LPOLESTREAM;
typedef struct _OLESTREAMVTBL
{
    DWORD (* Get)(LPOLESTREAM, void *, DWORD);
    DWORD (* Put)(LPOLESTREAM, const void *, DWORD);
} OLESTREAMVTBL;
typedef  OLESTREAMVTBL *  LPOLESTREAMVTBL;
typedef struct _OLESTREAM
{
    LPOLESTREAMVTBL lpstbl;
} OLESTREAM;
extern  HRESULT  OleConvertOLESTREAMToIStorage
    ( LPOLESTREAM                lpolestream,
     LPSTORAGE                   pstg,
     const DVTARGETDEVICE *   ptd);
extern  HRESULT  OleConvertIStorageToOLESTREAM
    ( LPSTORAGE      pstg,
     LPOLESTREAM     lpolestream);
extern  HRESULT  GetHGlobalFromILockBytes ( LPLOCKBYTES plkbyt,  HGLOBAL * phglobal);
extern  HRESULT  CreateILockBytesOnHGlobal ( HGLOBAL hGlobal,  BOOL fDeleteOnRelease,
                                     LPLOCKBYTES * pplkbyt);
extern  HRESULT  GetHGlobalFromStream ( LPSTREAM pstm,  HGLOBAL * phglobal);
extern  HRESULT  CreateStreamOnHGlobal ( HGLOBAL hGlobal,  BOOL fDeleteOnRelease,
                                 LPSTREAM * ppstm);
extern  HRESULT  OleDoAutoConvert( LPSTORAGE pStg,  LPCLSID pClsidNew);
extern  HRESULT  OleGetAutoConvert( const IID * const clsidOld,  LPCLSID pClsidNew);
extern  HRESULT  OleSetAutoConvert( const IID * const clsidOld,  const IID * const clsidNew);
extern  HRESULT  GetConvertStg( LPSTORAGE pStg);
extern  HRESULT  SetConvertStg( LPSTORAGE pStg,  BOOL fConvert);
extern  HRESULT  OleConvertIStorageToOLESTREAMEx
    ( LPSTORAGE          pstg,
      CLIPFORMAT         cfFormat,
      LONG               lWidth,
      LONG               lHeight,
      DWORD              dwSize,
      LPSTGMEDIUM        pmedium,
      LPOLESTREAM        polestm);
extern  HRESULT  OleConvertOLESTREAMToIStorageEx
    ( LPOLESTREAM        polestm,
      LPSTORAGE          pstg,
      CLIPFORMAT *    pcfFormat,
      LONG *          plwWidth,
      LONG *          plHeight,
      DWORD *         pdwSize,
      LPSTGMEDIUM        pmedium);
extern const GUID  IID_IPrintDialogCallback;
extern const GUID  IID_IPrintDialogServices;
typedef UINT_PTR ( *LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef struct tagOFN_NT4A {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   LPCSTR       lpstrFilter;
   LPSTR        lpstrCustomFilter;
   DWORD        nMaxCustFilter;
   DWORD        nFilterIndex;
   LPSTR        lpstrFile;
   DWORD        nMaxFile;
   LPSTR        lpstrFileTitle;
   DWORD        nMaxFileTitle;
   LPCSTR       lpstrInitialDir;
   LPCSTR       lpstrTitle;
   DWORD        Flags;
   WORD         nFileOffset;
   WORD         nFileExtension;
   LPCSTR       lpstrDefExt;
   LPARAM       lCustData;
   LPOFNHOOKPROC lpfnHook;
   LPCSTR       lpTemplateName;
} OPENFILENAME_NT4A, *LPOPENFILENAME_NT4A;
typedef struct tagOFN_NT4W {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   LPCWSTR      lpstrFilter;
   LPWSTR       lpstrCustomFilter;
   DWORD        nMaxCustFilter;
   DWORD        nFilterIndex;
   LPWSTR       lpstrFile;
   DWORD        nMaxFile;
   LPWSTR       lpstrFileTitle;
   DWORD        nMaxFileTitle;
   LPCWSTR      lpstrInitialDir;
   LPCWSTR      lpstrTitle;
   DWORD        Flags;
   WORD         nFileOffset;
   WORD         nFileExtension;
   LPCWSTR      lpstrDefExt;
   LPARAM       lCustData;
   LPOFNHOOKPROC lpfnHook;
   LPCWSTR      lpTemplateName;
} OPENFILENAME_NT4W, *LPOPENFILENAME_NT4W;
typedef OPENFILENAME_NT4A OPENFILENAME_NT4;
typedef LPOPENFILENAME_NT4A LPOPENFILENAME_NT4;
typedef struct tagOFNA {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   LPCSTR       lpstrFilter;
   LPSTR        lpstrCustomFilter;
   DWORD        nMaxCustFilter;
   DWORD        nFilterIndex;
   LPSTR        lpstrFile;
   DWORD        nMaxFile;
   LPSTR        lpstrFileTitle;
   DWORD        nMaxFileTitle;
   LPCSTR       lpstrInitialDir;
   LPCSTR       lpstrTitle;
   DWORD        Flags;
   WORD         nFileOffset;
   WORD         nFileExtension;
   LPCSTR       lpstrDefExt;
   LPARAM       lCustData;
   LPOFNHOOKPROC lpfnHook;
   LPCSTR       lpTemplateName;
   void *        pvReserved;
   DWORD        dwReserved;
   DWORD        FlagsEx;
} OPENFILENAMEA, *LPOPENFILENAMEA;
typedef struct tagOFNW {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   LPCWSTR      lpstrFilter;
   LPWSTR       lpstrCustomFilter;
   DWORD        nMaxCustFilter;
   DWORD        nFilterIndex;
   LPWSTR       lpstrFile;
   DWORD        nMaxFile;
   LPWSTR       lpstrFileTitle;
   DWORD        nMaxFileTitle;
   LPCWSTR      lpstrInitialDir;
   LPCWSTR      lpstrTitle;
   DWORD        Flags;
   WORD         nFileOffset;
   WORD         nFileExtension;
   LPCWSTR      lpstrDefExt;
   LPARAM       lCustData;
   LPOFNHOOKPROC lpfnHook;
   LPCWSTR      lpTemplateName;
   void *        pvReserved;
   DWORD        dwReserved;
   DWORD        FlagsEx;
} OPENFILENAMEW, *LPOPENFILENAMEW;
typedef OPENFILENAMEA OPENFILENAME;
typedef LPOPENFILENAMEA LPOPENFILENAME;
 BOOL   GetOpenFileNameA(LPOPENFILENAMEA);
 BOOL   GetOpenFileNameW(LPOPENFILENAMEW);
 BOOL   GetSaveFileNameA(LPOPENFILENAMEA);
 BOOL   GetSaveFileNameW(LPOPENFILENAMEW);
 short  GetFileTitleA(LPCSTR,  LPSTR Buf,  WORD cchSize);
 short  GetFileTitleW(LPCWSTR,  LPWSTR Buf,  WORD cchSize);
typedef UINT_PTR ( *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef struct _OFNOTIFYA
{
        NMHDR           hdr;
        LPOPENFILENAMEA lpOFN;
        LPSTR           pszFile;
} OFNOTIFYA, *LPOFNOTIFYA;
typedef struct _OFNOTIFYW
{
        NMHDR           hdr;
        LPOPENFILENAMEW lpOFN;
        LPWSTR          pszFile;
} OFNOTIFYW, *LPOFNOTIFYW;
typedef OFNOTIFYA OFNOTIFY;
typedef LPOFNOTIFYA LPOFNOTIFY;
typedef struct _OFNOTIFYEXA
{
        NMHDR           hdr;
        LPOPENFILENAMEA lpOFN;
        LPVOID          psf;
        LPVOID          pidl;
} OFNOTIFYEXA, *LPOFNOTIFYEXA;
typedef struct _OFNOTIFYEXW
{
        NMHDR           hdr;
        LPOPENFILENAMEW lpOFN;
        LPVOID          psf;
        LPVOID          pidl;
} OFNOTIFYEXW, *LPOFNOTIFYEXW;
typedef OFNOTIFYEXA OFNOTIFYEX;
typedef LPOFNOTIFYEXA LPOFNOTIFYEX;
typedef struct tagCHOOSECOLORA {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HWND         hInstance;
   COLORREF     rgbResult;
   COLORREF*    lpCustColors;
   DWORD        Flags;
   LPARAM       lCustData;
   LPCCHOOKPROC lpfnHook;
   LPCSTR       lpTemplateName;
} CHOOSECOLORA, *LPCHOOSECOLORA;
typedef struct tagCHOOSECOLORW {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HWND         hInstance;
   COLORREF     rgbResult;
   COLORREF*    lpCustColors;
   DWORD        Flags;
   LPARAM       lCustData;
   LPCCHOOKPROC lpfnHook;
   LPCWSTR      lpTemplateName;
} CHOOSECOLORW, *LPCHOOSECOLORW;
typedef CHOOSECOLORA CHOOSECOLOR;
typedef LPCHOOSECOLORA LPCHOOSECOLOR;
 BOOL  ChooseColorA(LPCHOOSECOLORA);
 BOOL  ChooseColorW(LPCHOOSECOLORW);
typedef UINT_PTR ( *LPFRHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef struct tagFINDREPLACEA {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   DWORD        Flags;
   LPSTR        lpstrFindWhat;
   LPSTR        lpstrReplaceWith;
   WORD         wFindWhatLen;
   WORD         wReplaceWithLen;
   LPARAM       lCustData;
   LPFRHOOKPROC lpfnHook;
   LPCSTR       lpTemplateName;
} FINDREPLACEA, *LPFINDREPLACEA;
typedef struct tagFINDREPLACEW {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   DWORD        Flags;
   LPWSTR       lpstrFindWhat;
   LPWSTR       lpstrReplaceWith;
   WORD         wFindWhatLen;
   WORD         wReplaceWithLen;
   LPARAM       lCustData;
   LPFRHOOKPROC lpfnHook;
   LPCWSTR      lpTemplateName;
} FINDREPLACEW, *LPFINDREPLACEW;
typedef FINDREPLACEA FINDREPLACE;
typedef LPFINDREPLACEA LPFINDREPLACE;
 HWND  FindTextA(LPFINDREPLACEA);
 HWND  FindTextW(LPFINDREPLACEW);
 HWND  ReplaceTextA(LPFINDREPLACEA);
 HWND  ReplaceTextW(LPFINDREPLACEW);
typedef UINT_PTR ( *LPCFHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef struct tagCHOOSEFONTA {
   DWORD           lStructSize;
   HWND            hwndOwner;
   HDC             hDC;
   LPLOGFONTA      lpLogFont;
   INT             iPointSize;
   DWORD           Flags;
   COLORREF        rgbColors;
   LPARAM          lCustData;
   LPCFHOOKPROC    lpfnHook;
   LPCSTR          lpTemplateName;
   HINSTANCE       hInstance;
   LPSTR           lpszStyle;
   WORD            nFontType;
   WORD            ___MISSING_ALIGNMENT__;
   INT             nSizeMin;
   INT             nSizeMax;
} CHOOSEFONTA;
typedef struct tagCHOOSEFONTW {
   DWORD           lStructSize;
   HWND            hwndOwner;
   HDC             hDC;
   LPLOGFONTW      lpLogFont;
   INT             iPointSize;
   DWORD           Flags;
   COLORREF        rgbColors;
   LPARAM          lCustData;
   LPCFHOOKPROC    lpfnHook;
   LPCWSTR         lpTemplateName;
   HINSTANCE       hInstance;
   LPWSTR          lpszStyle;
   WORD            nFontType;
   WORD            ___MISSING_ALIGNMENT__;
   INT             nSizeMin;
   INT             nSizeMax;
} CHOOSEFONTW;
typedef CHOOSEFONTA CHOOSEFONT;
typedef CHOOSEFONTA *LPCHOOSEFONTA;
typedef CHOOSEFONTW *LPCHOOSEFONTW;
typedef LPCHOOSEFONTA LPCHOOSEFONT;
typedef const CHOOSEFONTA *PCCHOOSEFONTA;
typedef const CHOOSEFONTW *PCCHOOSEFONTW;
typedef CHOOSEFONTA CHOOSEFONT;
typedef PCCHOOSEFONTA PCCHOOSEFONT;
 BOOL  ChooseFontA(LPCHOOSEFONTA);
 BOOL  ChooseFontW(LPCHOOSEFONTW);
typedef UINT_PTR ( *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef UINT_PTR ( *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
typedef struct tagPDA {
   DWORD            lStructSize;
   HWND             hwndOwner;
   HGLOBAL          hDevMode;
   HGLOBAL          hDevNames;
   HDC              hDC;
   DWORD            Flags;
   WORD             nFromPage;
   WORD             nToPage;
   WORD             nMinPage;
   WORD             nMaxPage;
   WORD             nCopies;
   HINSTANCE        hInstance;
   LPARAM           lCustData;
   LPPRINTHOOKPROC  lpfnPrintHook;
   LPSETUPHOOKPROC  lpfnSetupHook;
   LPCSTR           lpPrintTemplateName;
   LPCSTR           lpSetupTemplateName;
   HGLOBAL          hPrintTemplate;
   HGLOBAL          hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;
typedef struct tagPDW {
   DWORD            lStructSize;
   HWND             hwndOwner;
   HGLOBAL          hDevMode;
   HGLOBAL          hDevNames;
   HDC              hDC;
   DWORD            Flags;
   WORD             nFromPage;
   WORD             nToPage;
   WORD             nMinPage;
   WORD             nMaxPage;
   WORD             nCopies;
   HINSTANCE        hInstance;
   LPARAM           lCustData;
   LPPRINTHOOKPROC  lpfnPrintHook;
   LPSETUPHOOKPROC  lpfnSetupHook;
   LPCWSTR          lpPrintTemplateName;
   LPCWSTR          lpSetupTemplateName;
   HGLOBAL          hPrintTemplate;
   HGLOBAL          hSetupTemplate;
} PRINTDLGW, *LPPRINTDLGW;
typedef PRINTDLGA PRINTDLG;
typedef LPPRINTDLGA LPPRINTDLG;
 BOOL  PrintDlgA(LPPRINTDLGA);
 BOOL  PrintDlgW(LPPRINTDLGW);
typedef struct IPrintDialogCallback { struct IPrintDialogCallbackVtbl * lpVtbl; } IPrintDialogCallback; typedef struct IPrintDialogCallbackVtbl IPrintDialogCallbackVtbl; struct IPrintDialogCallbackVtbl
{
    HRESULT ( * QueryInterface) (IPrintDialogCallback * This, const IID * const riid, LPVOID *ppvObj) ;
    ULONG ( * AddRef) (IPrintDialogCallback * This) ;
    ULONG ( * Release) (IPrintDialogCallback * This) ;
    HRESULT ( * InitDone) (IPrintDialogCallback * This) ;
    HRESULT ( * SelectionChange) (IPrintDialogCallback * This) ;
    HRESULT ( * HandleMessage) (IPrintDialogCallback * This, HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult) ;
};
typedef struct IPrintDialogServices { struct IPrintDialogServicesVtbl * lpVtbl; } IPrintDialogServices; typedef struct IPrintDialogServicesVtbl IPrintDialogServicesVtbl; struct IPrintDialogServicesVtbl
{
    HRESULT ( * QueryInterface) (IPrintDialogServices * This, const IID * const riid, LPVOID *ppvObj) ;
    ULONG ( * AddRef) (IPrintDialogServices * This) ;
    ULONG ( * Release) (IPrintDialogServices * This) ;
    HRESULT ( * GetCurrentDevMode) (IPrintDialogServices * This,  LPDEVMODE pDevMode,  UINT *pcbSize) ;
    HRESULT ( * GetCurrentPrinterName) (IPrintDialogServices * This,  LPWSTR pPrinterName,  UINT *pcchSize) ;
    HRESULT ( * GetCurrentPortName) (IPrintDialogServices * This,  LPWSTR pPortName,  UINT *pcchSize) ;
};
typedef struct tagPRINTPAGERANGE {
   DWORD  nFromPage;
   DWORD  nToPage;
} PRINTPAGERANGE;
typedef PRINTPAGERANGE *LPPRINTPAGERANGE;
typedef const PRINTPAGERANGE *PCPRINTPAGERANGE;
typedef struct tagPDEXA {
   DWORD                 lStructSize;
   HWND                  hwndOwner;
   HGLOBAL               hDevMode;
   HGLOBAL               hDevNames;
   HDC                   hDC;
   DWORD                 Flags;
   DWORD                 Flags2;
   DWORD                 ExclusionFlags;
   DWORD                 nPageRanges;
   DWORD                 nMaxPageRanges;
   LPPRINTPAGERANGE      lpPageRanges;
   DWORD                 nMinPage;
   DWORD                 nMaxPage;
   DWORD                 nCopies;
   HINSTANCE             hInstance;
   LPCSTR                lpPrintTemplateName;
   LPUNKNOWN             lpCallback;
   DWORD                 nPropertyPages;
   HPROPSHEETPAGE       *lphPropertyPages;
   DWORD                 nStartPage;
   DWORD                 dwResultAction;
} PRINTDLGEXA, *LPPRINTDLGEXA;
typedef struct tagPDEXW {
   DWORD                 lStructSize;
   HWND                  hwndOwner;
   HGLOBAL               hDevMode;
   HGLOBAL               hDevNames;
   HDC                   hDC;
   DWORD                 Flags;
   DWORD                 Flags2;
   DWORD                 ExclusionFlags;
   DWORD                 nPageRanges;
   DWORD                 nMaxPageRanges;
   LPPRINTPAGERANGE      lpPageRanges;
   DWORD                 nMinPage;
   DWORD                 nMaxPage;
   DWORD                 nCopies;
   HINSTANCE             hInstance;
   LPCWSTR               lpPrintTemplateName;
   LPUNKNOWN             lpCallback;
   DWORD                 nPropertyPages;
   HPROPSHEETPAGE       *lphPropertyPages;
   DWORD                 nStartPage;
   DWORD                 dwResultAction;
} PRINTDLGEXW, *LPPRINTDLGEXW;
typedef PRINTDLGEXA PRINTDLGEX;
typedef LPPRINTDLGEXA LPPRINTDLGEX;
 HRESULT  PrintDlgExA(LPPRINTDLGEXA);
 HRESULT  PrintDlgExW(LPPRINTDLGEXW);
typedef struct tagDEVNAMES {
   WORD wDriverOffset;
   WORD wDeviceOffset;
   WORD wOutputOffset;
   WORD wDefault;
} DEVNAMES;
typedef DEVNAMES *LPDEVNAMES;
typedef const DEVNAMES *PCDEVNAMES;
 DWORD  CommDlgExtendedError(void);
typedef UINT_PTR (* LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM );
typedef UINT_PTR (* LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM );
typedef struct tagPSDA
{
    DWORD           lStructSize;
    HWND            hwndOwner;
    HGLOBAL         hDevMode;
    HGLOBAL         hDevNames;
    DWORD           Flags;
    POINT           ptPaperSize;
    RECT            rtMinMargin;
    RECT            rtMargin;
    HINSTANCE       hInstance;
    LPARAM          lCustData;
    LPPAGESETUPHOOK lpfnPageSetupHook;
    LPPAGEPAINTHOOK lpfnPagePaintHook;
    LPCSTR          lpPageSetupTemplateName;
    HGLOBAL         hPageSetupTemplate;
} PAGESETUPDLGA, * LPPAGESETUPDLGA;
typedef struct tagPSDW
{
    DWORD           lStructSize;
    HWND            hwndOwner;
    HGLOBAL         hDevMode;
    HGLOBAL         hDevNames;
    DWORD           Flags;
    POINT           ptPaperSize;
    RECT            rtMinMargin;
    RECT            rtMargin;
    HINSTANCE       hInstance;
    LPARAM          lCustData;
    LPPAGESETUPHOOK lpfnPageSetupHook;
    LPPAGEPAINTHOOK lpfnPagePaintHook;
    LPCWSTR         lpPageSetupTemplateName;
    HGLOBAL         hPageSetupTemplate;
} PAGESETUPDLGW, * LPPAGESETUPDLGW;
typedef PAGESETUPDLGA PAGESETUPDLG;
typedef LPPAGESETUPDLGA LPPAGESETUPDLG;
 BOOL  PageSetupDlgA( LPPAGESETUPDLGA );
 BOOL  PageSetupDlgW( LPPAGESETUPDLGW );
__inline
PUWSTR
static
__declspec(deprecated)
ua_wcscpy(
     PUWSTR  Destination,
     PCUWSTR Source
    )
{
    return wcscpy(Destination, Source);
}
typedef struct _SERVICE_DESCRIPTIONA {
    LPSTR       lpDescription;
} SERVICE_DESCRIPTIONA, *LPSERVICE_DESCRIPTIONA;
typedef struct _SERVICE_DESCRIPTIONW {
    LPWSTR      lpDescription;
} SERVICE_DESCRIPTIONW, *LPSERVICE_DESCRIPTIONW;
typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION;
typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION;
typedef enum _SC_ACTION_TYPE {
        SC_ACTION_NONE          = 0,
        SC_ACTION_RESTART       = 1,
        SC_ACTION_REBOOT        = 2,
        SC_ACTION_RUN_COMMAND   = 3
} SC_ACTION_TYPE;
typedef struct _SC_ACTION {
    SC_ACTION_TYPE  Type;
    DWORD           Delay;
} SC_ACTION, *LPSC_ACTION;
typedef struct _SERVICE_FAILURE_ACTIONSA {
    DWORD       dwResetPeriod;
    LPSTR       lpRebootMsg;
    LPSTR       lpCommand;
    DWORD       cActions;
    SC_ACTION * lpsaActions;
} SERVICE_FAILURE_ACTIONSA, *LPSERVICE_FAILURE_ACTIONSA;
typedef struct _SERVICE_FAILURE_ACTIONSW {
    DWORD       dwResetPeriod;
    LPWSTR      lpRebootMsg;
    LPWSTR      lpCommand;
    DWORD       cActions;
    SC_ACTION * lpsaActions;
} SERVICE_FAILURE_ACTIONSW, *LPSERVICE_FAILURE_ACTIONSW;
typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS;
typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS;
typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
    BOOL       fDelayedAutostart;
} SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
    BOOL       fFailureActionsOnNonCrashFailures;
} SERVICE_FAILURE_ACTIONS_FLAG, *LPSERVICE_FAILURE_ACTIONS_FLAG;
typedef struct _SERVICE_SID_INFO {
    DWORD       dwServiceSidType;
} SERVICE_SID_INFO, *LPSERVICE_SID_INFO;
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
    LPSTR       pmszRequiredPrivileges;
} SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
    LPWSTR      pmszRequiredPrivileges;
} SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
typedef SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFO;
typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOA LPSERVICE_REQUIRED_PRIVILEGES_INFO;
typedef struct _SERVICE_PRESHUTDOWN_INFO {
    DWORD       dwPreshutdownTimeout;
} SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
struct SC_HANDLE__ { int unused; }; typedef struct SC_HANDLE__ *SC_HANDLE;
typedef SC_HANDLE   *LPSC_HANDLE;
struct SERVICE_STATUS_HANDLE__ { int unused; }; typedef struct SERVICE_STATUS_HANDLE__ *SERVICE_STATUS_HANDLE;
typedef enum _SC_STATUS_TYPE {
    SC_STATUS_PROCESS_INFO      = 0
} SC_STATUS_TYPE;
typedef enum _SC_ENUM_TYPE {
    SC_ENUM_PROCESS_INFO        = 0
} SC_ENUM_TYPE;
typedef struct _SERVICE_STATUS {
    DWORD   dwServiceType;
    DWORD   dwCurrentState;
    DWORD   dwControlsAccepted;
    DWORD   dwWin32ExitCode;
    DWORD   dwServiceSpecificExitCode;
    DWORD   dwCheckPoint;
    DWORD   dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
typedef struct _SERVICE_STATUS_PROCESS {
    DWORD   dwServiceType;
    DWORD   dwCurrentState;
    DWORD   dwControlsAccepted;
    DWORD   dwWin32ExitCode;
    DWORD   dwServiceSpecificExitCode;
    DWORD   dwCheckPoint;
    DWORD   dwWaitHint;
    DWORD   dwProcessId;
    DWORD   dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
typedef struct _ENUM_SERVICE_STATUSA {
    LPSTR             lpServiceName;
    LPSTR             lpDisplayName;
    SERVICE_STATUS    ServiceStatus;
} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
typedef struct _ENUM_SERVICE_STATUSW {
    LPWSTR            lpServiceName;
    LPWSTR            lpDisplayName;
    SERVICE_STATUS    ServiceStatus;
} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS;
typedef LPENUM_SERVICE_STATUSA LPENUM_SERVICE_STATUS;
typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
    LPSTR                     lpServiceName;
    LPSTR                     lpDisplayName;
    SERVICE_STATUS_PROCESS    ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;
typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
    LPWSTR                    lpServiceName;
    LPWSTR                    lpDisplayName;
    SERVICE_STATUS_PROCESS    ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
typedef ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS;
typedef LPENUM_SERVICE_STATUS_PROCESSA LPENUM_SERVICE_STATUS_PROCESS;
typedef LPVOID  SC_LOCK;
typedef struct _QUERY_SERVICE_LOCK_STATUSA {
    DWORD   fIsLocked;
    LPSTR   lpLockOwner;
    DWORD   dwLockDuration;
} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
typedef struct _QUERY_SERVICE_LOCK_STATUSW {
    DWORD   fIsLocked;
    LPWSTR  lpLockOwner;
    DWORD   dwLockDuration;
} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS;
typedef LPQUERY_SERVICE_LOCK_STATUSA LPQUERY_SERVICE_LOCK_STATUS;
typedef struct _QUERY_SERVICE_CONFIGA {
    DWORD   dwServiceType;
    DWORD   dwStartType;
    DWORD   dwErrorControl;
    LPSTR   lpBinaryPathName;
    LPSTR   lpLoadOrderGroup;
    DWORD   dwTagId;
    LPSTR   lpDependencies;
    LPSTR   lpServiceStartName;
    LPSTR   lpDisplayName;
} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
typedef struct _QUERY_SERVICE_CONFIGW {
    DWORD   dwServiceType;
    DWORD   dwStartType;
    DWORD   dwErrorControl;
    LPWSTR  lpBinaryPathName;
    LPWSTR  lpLoadOrderGroup;
    DWORD   dwTagId;
    LPWSTR  lpDependencies;
    LPWSTR  lpServiceStartName;
    LPWSTR  lpDisplayName;
} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG;
typedef LPQUERY_SERVICE_CONFIGA LPQUERY_SERVICE_CONFIG;
typedef void ( *LPSERVICE_MAIN_FUNCTIONW)(
    DWORD   dwNumServicesArgs,
    LPWSTR  *lpServiceArgVectors
    );
typedef void ( *LPSERVICE_MAIN_FUNCTIONA)(
    DWORD   dwNumServicesArgs,
    LPSTR   *lpServiceArgVectors
    );
typedef struct _SERVICE_TABLE_ENTRYA {
    LPSTR                       lpServiceName;
    LPSERVICE_MAIN_FUNCTIONA    lpServiceProc;
}SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
typedef struct _SERVICE_TABLE_ENTRYW {
    LPWSTR                      lpServiceName;
    LPSERVICE_MAIN_FUNCTIONW    lpServiceProc;
}SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY;
typedef LPSERVICE_TABLE_ENTRYA LPSERVICE_TABLE_ENTRY;
typedef void ( *LPHANDLER_FUNCTION)(
    DWORD    dwControl
    );
typedef DWORD ( *LPHANDLER_FUNCTION_EX)(
    DWORD    dwControl,
    DWORD    dwEventType,
    LPVOID   lpEventData,
    LPVOID   lpContext
    );
typedef
void
(  * PFN_SC_NOTIFY_CALLBACK ) (
     PVOID pParameter
    );
typedef struct _SERVICE_NOTIFY_1 {
    DWORD                   dwVersion;
    PFN_SC_NOTIFY_CALLBACK  pfnNotifyCallback;
    PVOID                   pContext;
    DWORD                   dwNotificationStatus;
    SERVICE_STATUS_PROCESS  ServiceStatus;
} SERVICE_NOTIFY_1, *PSERVICE_NOTIFY_1;
typedef struct _SERVICE_NOTIFY_2A {
    DWORD                   dwVersion;
    PFN_SC_NOTIFY_CALLBACK  pfnNotifyCallback;
    PVOID                   pContext;
    DWORD                   dwNotificationStatus;
    SERVICE_STATUS_PROCESS  ServiceStatus;
    DWORD                   dwNotificationTriggered;
    LPSTR                   pszServiceNames;
} SERVICE_NOTIFY_2A, *PSERVICE_NOTIFY_2A;
typedef struct _SERVICE_NOTIFY_2W {
    DWORD                   dwVersion;
    PFN_SC_NOTIFY_CALLBACK  pfnNotifyCallback;
    PVOID                   pContext;
    DWORD                   dwNotificationStatus;
    SERVICE_STATUS_PROCESS  ServiceStatus;
    DWORD                   dwNotificationTriggered;
    LPWSTR                  pszServiceNames;
} SERVICE_NOTIFY_2W, *PSERVICE_NOTIFY_2W;
typedef SERVICE_NOTIFY_2A SERVICE_NOTIFY_2;
typedef PSERVICE_NOTIFY_2A PSERVICE_NOTIFY_2;
typedef SERVICE_NOTIFY_2A SERVICE_NOTIFYA, *PSERVICE_NOTIFYA;
typedef SERVICE_NOTIFY_2W SERVICE_NOTIFYW, *PSERVICE_NOTIFYW;
typedef SERVICE_NOTIFYA SERVICE_NOTIFY;
typedef PSERVICE_NOTIFYA PSERVICE_NOTIFY;
typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSA {
    DWORD                   dwReason;
    LPSTR                   pszComment;
    SERVICE_STATUS_PROCESS  ServiceStatus;
} SERVICE_CONTROL_STATUS_REASON_PARAMSA, *PSERVICE_CONTROL_STATUS_REASON_PARAMSA;
typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSW {
    DWORD                   dwReason;
    LPWSTR                  pszComment;
    SERVICE_STATUS_PROCESS  ServiceStatus;
} SERVICE_CONTROL_STATUS_REASON_PARAMSW, *PSERVICE_CONTROL_STATUS_REASON_PARAMSW;
typedef SERVICE_CONTROL_STATUS_REASON_PARAMSA SERVICE_CONTROL_STATUS_REASON_PARAMS;
typedef PSERVICE_CONTROL_STATUS_REASON_PARAMSA PSERVICE_CONTROL_STATUS_REASON_PARAMS;

BOOL

ChangeServiceConfigA(
            SC_HANDLE    hService,
            DWORD        dwServiceType,
            DWORD        dwStartType,
            DWORD        dwErrorControl,
        LPCSTR     lpBinaryPathName,
        LPCSTR     lpLoadOrderGroup,
       LPDWORD      lpdwTagId,
        LPCSTR     lpDependencies,
        LPCSTR     lpServiceStartName,
        LPCSTR     lpPassword,
        LPCSTR     lpDisplayName
    );

BOOL

ChangeServiceConfigW(
            SC_HANDLE    hService,
            DWORD        dwServiceType,
            DWORD        dwStartType,
            DWORD        dwErrorControl,
        LPCWSTR     lpBinaryPathName,
        LPCWSTR     lpLoadOrderGroup,
       LPDWORD      lpdwTagId,
        LPCWSTR     lpDependencies,
        LPCWSTR     lpServiceStartName,
        LPCWSTR     lpPassword,
        LPCWSTR     lpDisplayName
    );

BOOL

ChangeServiceConfig2A(
            SC_HANDLE    hService,
            DWORD        dwInfoLevel,
        LPVOID       lpInfo
    );

BOOL

ChangeServiceConfig2W(
            SC_HANDLE    hService,
            DWORD        dwInfoLevel,
        LPVOID       lpInfo
    );

BOOL

CloseServiceHandle(
            SC_HANDLE   hSCObject
    );

BOOL

ControlService(
            SC_HANDLE           hService,
            DWORD               dwControl,
           LPSERVICE_STATUS    lpServiceStatus
    );

SC_HANDLE

CreateServiceA(
            SC_HANDLE    hSCManager,
            LPCSTR     lpServiceName,
        LPCSTR     lpDisplayName,
            DWORD        dwDesiredAccess,
            DWORD        dwServiceType,
            DWORD        dwStartType,
            DWORD        dwErrorControl,
        LPCSTR     lpBinaryPathName,
        LPCSTR     lpLoadOrderGroup,
       LPDWORD      lpdwTagId,
        LPCSTR     lpDependencies,
        LPCSTR     lpServiceStartName,
        LPCSTR     lpPassword
    );

SC_HANDLE

CreateServiceW(
            SC_HANDLE    hSCManager,
            LPCWSTR     lpServiceName,
        LPCWSTR     lpDisplayName,
            DWORD        dwDesiredAccess,
            DWORD        dwServiceType,
            DWORD        dwStartType,
            DWORD        dwErrorControl,
        LPCWSTR     lpBinaryPathName,
        LPCWSTR     lpLoadOrderGroup,
       LPDWORD      lpdwTagId,
        LPCWSTR     lpDependencies,
        LPCWSTR     lpServiceStartName,
        LPCWSTR     lpPassword
    );

BOOL

DeleteService(
            SC_HANDLE   hService
    );

BOOL

EnumDependentServicesA(
                SC_HANDLE               hService,
                DWORD                   dwServiceState,
                    LPENUM_SERVICE_STATUSA  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned
    );

BOOL

EnumDependentServicesW(
                SC_HANDLE               hService,
                DWORD                   dwServiceState,
                    LPENUM_SERVICE_STATUSW  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned
    );

BOOL

EnumServicesStatusA(
                SC_HANDLE               hSCManager,
                DWORD                   dwServiceType,
                DWORD                   dwServiceState,
                    LPENUM_SERVICE_STATUSA  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned,
         LPDWORD                 lpResumeHandle
    );

BOOL

EnumServicesStatusW(
                SC_HANDLE               hSCManager,
                DWORD                   dwServiceType,
                DWORD                   dwServiceState,
                    LPENUM_SERVICE_STATUSW  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned,
         LPDWORD                 lpResumeHandle
    );

BOOL

EnumServicesStatusExA(
                SC_HANDLE               hSCManager,
                SC_ENUM_TYPE            InfoLevel,
                DWORD                   dwServiceType,
                DWORD                   dwServiceState,
                    LPBYTE                  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned,
         LPDWORD                 lpResumeHandle,
            LPCSTR                pszGroupName
    );

BOOL

EnumServicesStatusExW(
                SC_HANDLE               hSCManager,
                SC_ENUM_TYPE            InfoLevel,
                DWORD                   dwServiceType,
                DWORD                   dwServiceState,
                    LPBYTE                  lpServices,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded,
               LPDWORD                 lpServicesReturned,
         LPDWORD                 lpResumeHandle,
            LPCWSTR                pszGroupName
    );

BOOL

GetServiceKeyNameA(
                SC_HANDLE               hSCManager,
                LPCSTR                lpDisplayName,
                    LPSTR                 lpServiceName,
             LPDWORD                 lpcchBuffer
    );

BOOL

GetServiceKeyNameW(
                SC_HANDLE               hSCManager,
                LPCWSTR                lpDisplayName,
                    LPWSTR                 lpServiceName,
             LPDWORD                 lpcchBuffer
    );

BOOL

GetServiceDisplayNameA(
                SC_HANDLE               hSCManager,
                LPCSTR                lpServiceName,
                    LPSTR                 lpDisplayName,
             LPDWORD                 lpcchBuffer
    );

BOOL

GetServiceDisplayNameW(
                SC_HANDLE               hSCManager,
                LPCWSTR                lpServiceName,
                    LPWSTR                 lpDisplayName,
             LPDWORD                 lpcchBuffer
    );

SC_LOCK

LockServiceDatabase(
                SC_HANDLE               hSCManager
    );

BOOL

NotifyBootConfigStatus(
                BOOL                    BootAcceptable
    );

SC_HANDLE

OpenSCManagerA(
            LPCSTR                lpMachineName,
            LPCSTR                lpDatabaseName,
                DWORD                   dwDesiredAccess
    );

SC_HANDLE

OpenSCManagerW(
            LPCWSTR                lpMachineName,
            LPCWSTR                lpDatabaseName,
                DWORD                   dwDesiredAccess
    );

SC_HANDLE

OpenServiceA(
                SC_HANDLE               hSCManager,
                LPCSTR                lpServiceName,
                DWORD                   dwDesiredAccess
    );

SC_HANDLE

OpenServiceW(
                SC_HANDLE               hSCManager,
                LPCWSTR                lpServiceName,
                DWORD                   dwDesiredAccess
    );

BOOL

QueryServiceConfigA(
                SC_HANDLE               hService,
                    LPQUERY_SERVICE_CONFIGA lpServiceConfig,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded
    );

BOOL

QueryServiceConfigW(
                SC_HANDLE               hService,
                    LPQUERY_SERVICE_CONFIGW lpServiceConfig,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded
    );

BOOL

QueryServiceConfig2A(
                SC_HANDLE               hService,
                DWORD                   dwInfoLevel,
                    LPBYTE                  lpBuffer,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded
    );

BOOL

QueryServiceConfig2W(
                SC_HANDLE               hService,
                DWORD                   dwInfoLevel,
                    LPBYTE                  lpBuffer,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded
    );

BOOL

QueryServiceLockStatusA(
                SC_HANDLE                       hSCManager,
                    LPQUERY_SERVICE_LOCK_STATUSA    lpLockStatus,
                DWORD                           cbBufSize,
               LPDWORD                         pcbBytesNeeded
    );

BOOL

QueryServiceLockStatusW(
                SC_HANDLE                       hSCManager,
                    LPQUERY_SERVICE_LOCK_STATUSW    lpLockStatus,
                DWORD                           cbBufSize,
               LPDWORD                         pcbBytesNeeded
    );

BOOL

QueryServiceObjectSecurity(
                SC_HANDLE               hService,
                SECURITY_INFORMATION    dwSecurityInformation,
                    PSECURITY_DESCRIPTOR    lpSecurityDescriptor,
                DWORD                   cbBufSize,
               LPDWORD                 pcbBytesNeeded
    );

BOOL

QueryServiceStatus(
                SC_HANDLE           hService,
               LPSERVICE_STATUS    lpServiceStatus
    );

BOOL

QueryServiceStatusEx(
                SC_HANDLE           hService,
                SC_STATUS_TYPE      InfoLevel,
                    LPBYTE              lpBuffer,
                DWORD               cbBufSize,
               LPDWORD             pcbBytesNeeded
    );

SERVICE_STATUS_HANDLE

RegisterServiceCtrlHandlerA(
        LPCSTR                    lpServiceName,
            LPHANDLER_FUNCTION          lpHandlerProc
    );

SERVICE_STATUS_HANDLE

RegisterServiceCtrlHandlerW(
        LPCWSTR                    lpServiceName,
            LPHANDLER_FUNCTION          lpHandlerProc
    );

SERVICE_STATUS_HANDLE

RegisterServiceCtrlHandlerExA(
        LPCSTR                    lpServiceName,
            LPHANDLER_FUNCTION_EX       lpHandlerProc,
     LPVOID                     lpContext
    );

SERVICE_STATUS_HANDLE

RegisterServiceCtrlHandlerExW(
        LPCWSTR                    lpServiceName,
            LPHANDLER_FUNCTION_EX       lpHandlerProc,
     LPVOID                     lpContext
    );

BOOL

SetServiceObjectSecurity(
            SC_HANDLE               hService,
            SECURITY_INFORMATION    dwSecurityInformation,
            PSECURITY_DESCRIPTOR    lpSecurityDescriptor
    );

BOOL

SetServiceStatus(
            SERVICE_STATUS_HANDLE   hServiceStatus,
            LPSERVICE_STATUS        lpServiceStatus
    );

BOOL

StartServiceCtrlDispatcherA(
     const  SERVICE_TABLE_ENTRYA    *lpServiceStartTable
    );

BOOL

StartServiceCtrlDispatcherW(
     const  SERVICE_TABLE_ENTRYW    *lpServiceStartTable
    );

BOOL

StartServiceA(
                SC_HANDLE            hService,
                DWORD                dwNumServiceArgs,
                    LPCSTR             *lpServiceArgVectors
    );

BOOL

StartServiceW(
                SC_HANDLE            hService,
                DWORD                dwNumServiceArgs,
                    LPCWSTR             *lpServiceArgVectors
    );

BOOL

UnlockServiceDatabase(
                SC_LOCK             ScLock
    );

DWORD

NotifyServiceStatusChangeA (
            SC_HANDLE               hService,
            DWORD                   dwNotifyMask,
            PSERVICE_NOTIFYA        pNotifyBuffer
    );

DWORD

NotifyServiceStatusChangeW (
            SC_HANDLE               hService,
            DWORD                   dwNotifyMask,
            PSERVICE_NOTIFYW        pNotifyBuffer
    );

BOOL

ControlServiceExA(
            SC_HANDLE               hService,
            DWORD                   dwControl,
            DWORD                   dwInfoLevel,
         PVOID                   pControlParams
    );

BOOL

ControlServiceExW(
            SC_HANDLE               hService,
            DWORD                   dwControl,
            DWORD                   dwInfoLevel,
         PVOID                   pControlParams
    );
typedef struct _MODEMDEVCAPS {
    DWORD   dwActualSize;
    DWORD   dwRequiredSize;
    DWORD   dwDevSpecificOffset;
    DWORD   dwDevSpecificSize;
    DWORD   dwModemProviderVersion;
    DWORD   dwModemManufacturerOffset;
    DWORD   dwModemManufacturerSize;
    DWORD   dwModemModelOffset;
    DWORD   dwModemModelSize;
    DWORD   dwModemVersionOffset;
    DWORD   dwModemVersionSize;
    DWORD   dwDialOptions;
    DWORD   dwCallSetupFailTimer;
    DWORD   dwInactivityTimeout;
    DWORD   dwSpeakerVolume;
    DWORD   dwSpeakerMode;
    DWORD   dwModemOptions;
    DWORD   dwMaxDTERate;
    DWORD   dwMaxDCERate;
    BYTE    abVariablePortion [1];
} MODEMDEVCAPS, *PMODEMDEVCAPS, *LPMODEMDEVCAPS;
typedef struct _MODEMSETTINGS {
    DWORD   dwActualSize;
    DWORD   dwRequiredSize;
    DWORD   dwDevSpecificOffset;
    DWORD   dwDevSpecificSize;
    DWORD   dwCallSetupFailTimer;
    DWORD   dwInactivityTimeout;
    DWORD   dwSpeakerVolume;
    DWORD   dwSpeakerMode;
    DWORD   dwPreferredModemOptions;
    DWORD   dwNegotiatedModemOptions;
    DWORD   dwNegotiatedDCERate;
    BYTE    abVariablePortion [1];
} MODEMSETTINGS, *PMODEMSETTINGS, *LPMODEMSETTINGS;
struct HIMC__ { int unused; }; typedef struct HIMC__ *HIMC;
struct HIMCC__ { int unused; }; typedef struct HIMCC__ *HIMCC;
typedef HKL   *LPHKL;
typedef UINT  *LPUINT;
typedef struct tagCOMPOSITIONFORM {
    DWORD dwStyle;
    POINT ptCurrentPos;
    RECT  rcArea;
} COMPOSITIONFORM, *PCOMPOSITIONFORM,  *NPCOMPOSITIONFORM,  *LPCOMPOSITIONFORM;
typedef struct tagCANDIDATEFORM {
    DWORD dwIndex;
    DWORD dwStyle;
    POINT ptCurrentPos;
    RECT  rcArea;
} CANDIDATEFORM, *PCANDIDATEFORM,  *NPCANDIDATEFORM,  *LPCANDIDATEFORM;
typedef struct tagCANDIDATELIST {
    DWORD dwSize;
    DWORD dwStyle;
    DWORD dwCount;
    DWORD dwSelection;
    DWORD dwPageStart;
    DWORD dwPageSize;
    DWORD dwOffset[1];
} CANDIDATELIST, *PCANDIDATELIST,  *NPCANDIDATELIST,  *LPCANDIDATELIST;
typedef struct tagREGISTERWORDA {
    LPSTR   lpReading;
    LPSTR   lpWord;
} REGISTERWORDA, *PREGISTERWORDA,  *NPREGISTERWORDA,  *LPREGISTERWORDA;
typedef struct tagREGISTERWORDW {
    LPWSTR  lpReading;
    LPWSTR  lpWord;
} REGISTERWORDW, *PREGISTERWORDW,  *NPREGISTERWORDW,  *LPREGISTERWORDW;
typedef REGISTERWORDA REGISTERWORD;
typedef PREGISTERWORDA PREGISTERWORD;
typedef NPREGISTERWORDA NPREGISTERWORD;
typedef LPREGISTERWORDA LPREGISTERWORD;
typedef struct tagRECONVERTSTRING {
    DWORD dwSize;
    DWORD dwVersion;
    DWORD dwStrLen;
    DWORD dwStrOffset;
    DWORD dwCompStrLen;
    DWORD dwCompStrOffset;
    DWORD dwTargetStrLen;
    DWORD dwTargetStrOffset;
} RECONVERTSTRING, *PRECONVERTSTRING,  *NPRECONVERTSTRING,  *LPRECONVERTSTRING;
typedef struct tagSTYLEBUFA {
    DWORD       dwStyle;
    CHAR        szDescription[32];
} STYLEBUFA, *PSTYLEBUFA,  *NPSTYLEBUFA,  *LPSTYLEBUFA;
typedef struct tagSTYLEBUFW {
    DWORD       dwStyle;
    WCHAR       szDescription[32];
} STYLEBUFW, *PSTYLEBUFW,  *NPSTYLEBUFW,  *LPSTYLEBUFW;
typedef STYLEBUFA STYLEBUF;
typedef PSTYLEBUFA PSTYLEBUF;
typedef NPSTYLEBUFA NPSTYLEBUF;
typedef LPSTYLEBUFA LPSTYLEBUF;
typedef struct tagIMEMENUITEMINFOA {
    UINT        cbSize;
    UINT        fType;
    UINT        fState;
    UINT        wID;
    HBITMAP     hbmpChecked;
    HBITMAP     hbmpUnchecked;
    DWORD       dwItemData;
    CHAR        szString[80];
    HBITMAP     hbmpItem;
} IMEMENUITEMINFOA, *PIMEMENUITEMINFOA,  *NPIMEMENUITEMINFOA,  *LPIMEMENUITEMINFOA;
typedef struct tagIMEMENUITEMINFOW {
    UINT        cbSize;
    UINT        fType;
    UINT        fState;
    UINT        wID;
    HBITMAP     hbmpChecked;
    HBITMAP     hbmpUnchecked;
    DWORD       dwItemData;
    WCHAR       szString[80];
    HBITMAP     hbmpItem;
} IMEMENUITEMINFOW, *PIMEMENUITEMINFOW,  *NPIMEMENUITEMINFOW,  *LPIMEMENUITEMINFOW;
typedef IMEMENUITEMINFOA IMEMENUITEMINFO;
typedef PIMEMENUITEMINFOA PIMEMENUITEMINFO;
typedef NPIMEMENUITEMINFOA NPIMEMENUITEMINFO;
typedef LPIMEMENUITEMINFOA LPIMEMENUITEMINFO;
typedef struct tagIMECHARPOSITION {
    DWORD       dwSize;
    DWORD       dwCharPos;
    POINT       pt;
    UINT        cLineHeight;
    RECT        rcDocument;
} IMECHARPOSITION, *PIMECHARPOSITION,  *NPIMECHARPOSITION,  *LPIMECHARPOSITION;
typedef BOOL    (* IMCENUMPROC)(HIMC, LPARAM);
HKL   ImmInstallIMEA( LPCSTR lpszIMEFileName,  LPCSTR lpszLayoutText);
HKL   ImmInstallIMEW( LPCWSTR lpszIMEFileName,  LPCWSTR lpszLayoutText);
HWND  ImmGetDefaultIMEWnd( HWND);
UINT  ImmGetDescriptionA( HKL,  LPSTR lpszDescription,  UINT uBufLen);
UINT  ImmGetDescriptionW( HKL,  LPWSTR lpszDescription,  UINT uBufLen);
UINT  ImmGetIMEFileNameA( HKL,  LPSTR lpszFileName,  UINT uBufLen);
UINT  ImmGetIMEFileNameW( HKL,  LPWSTR lpszFileName,  UINT uBufLen);
DWORD  ImmGetProperty( HKL,  DWORD);
BOOL  ImmIsIME( HKL);
BOOL  ImmSimulateHotKey( HWND,  DWORD);
HIMC  ImmCreateContext(void);
BOOL  ImmDestroyContext( HIMC);
HIMC  ImmGetContext( HWND);
BOOL  ImmReleaseContext( HWND,  HIMC);
HIMC  ImmAssociateContext( HWND,  HIMC);
BOOL  ImmAssociateContextEx( HWND,  HIMC,  DWORD);
LONG   ImmGetCompositionStringA( HIMC,  DWORD,  LPVOID lpBuf,  DWORD dwBufLen);
LONG   ImmGetCompositionStringW( HIMC,  DWORD,  LPVOID lpBuf,  DWORD dwBufLen);
BOOL   ImmSetCompositionStringA( HIMC,  DWORD dwIndex,  LPVOID lpComp,  DWORD dwCompLen,  LPVOID lpRead,  DWORD dwReadLen);
BOOL   ImmSetCompositionStringW( HIMC,  DWORD dwIndex,  LPVOID lpComp,  DWORD dwCompLen,  LPVOID lpRead,  DWORD dwReadLen);
DWORD  ImmGetCandidateListCountA( HIMC,  LPDWORD lpdwListCount);
DWORD  ImmGetCandidateListCountW( HIMC,  LPDWORD lpdwListCount);
DWORD  ImmGetCandidateListA( HIMC,  DWORD deIndex,  LPCANDIDATELIST lpCandList,  DWORD dwBufLen);
DWORD  ImmGetCandidateListW( HIMC,  DWORD deIndex,  LPCANDIDATELIST lpCandList,  DWORD dwBufLen);
DWORD  ImmGetGuideLineA( HIMC,  DWORD dwIndex,  LPSTR lpBuf,  DWORD dwBufLen);
DWORD  ImmGetGuideLineW( HIMC,  DWORD dwIndex,  LPWSTR lpBuf,  DWORD dwBufLen);
BOOL  ImmGetConversionStatus( HIMC,  LPDWORD lpfdwConversion,  LPDWORD lpfdwSentence);
BOOL  ImmSetConversionStatus( HIMC,  DWORD,  DWORD);
BOOL  ImmGetOpenStatus( HIMC);
BOOL  ImmSetOpenStatus( HIMC,  BOOL);
BOOL  ImmGetCompositionFontA( HIMC,  LPLOGFONTA lplf);
BOOL  ImmGetCompositionFontW( HIMC,  LPLOGFONTW lplf);
BOOL  ImmSetCompositionFontA( HIMC,  LPLOGFONTA lplf);
BOOL  ImmSetCompositionFontW( HIMC,  LPLOGFONTW lplf);
BOOL     ImmConfigureIMEA( HKL,  HWND,  DWORD,  LPVOID);
BOOL     ImmConfigureIMEW( HKL,  HWND,  DWORD,  LPVOID);
LRESULT  ImmEscapeA( HKL,  HIMC,  UINT,  LPVOID);
LRESULT  ImmEscapeW( HKL,  HIMC,  UINT,  LPVOID);
DWORD    ImmGetConversionListA( HKL,  HIMC,  LPCSTR lpSrc,  LPCANDIDATELIST lpDst,  DWORD dwBufLen,  UINT uFlag);
DWORD    ImmGetConversionListW( HKL,  HIMC,  LPCWSTR lpSrc,  LPCANDIDATELIST lpDst,  DWORD dwBufLen,  UINT uFlag);
BOOL     ImmNotifyIME( HIMC,  DWORD dwAction,  DWORD dwIndex,  DWORD dwValue);
BOOL  ImmGetStatusWindowPos( HIMC,  LPPOINT lpptPos);
BOOL  ImmSetStatusWindowPos( HIMC,  LPPOINT lpptPos);
BOOL  ImmGetCompositionWindow( HIMC,  LPCOMPOSITIONFORM lpCompForm);
BOOL  ImmSetCompositionWindow( HIMC,  LPCOMPOSITIONFORM lpCompForm);
BOOL  ImmGetCandidateWindow( HIMC,  DWORD,  LPCANDIDATEFORM lpCandidate);
BOOL  ImmSetCandidateWindow( HIMC,  LPCANDIDATEFORM lpCandidate);
BOOL  ImmIsUIMessageA( HWND,  UINT,  WPARAM,  LPARAM);
BOOL  ImmIsUIMessageW( HWND,  UINT,  WPARAM,  LPARAM);
UINT  ImmGetVirtualKey( HWND);
typedef int ( *REGISTERWORDENUMPROCA)( LPCSTR lpszReading, DWORD,  LPCSTR lpszString, LPVOID);
typedef int ( *REGISTERWORDENUMPROCW)( LPCWSTR lpszReading, DWORD,  LPCWSTR lpszString, LPVOID);
BOOL  ImmRegisterWordA( HKL,  LPCSTR lpszReading,  DWORD,  LPCSTR lpszRegister);
BOOL  ImmRegisterWordW( HKL,  LPCWSTR lpszReading,  DWORD,  LPCWSTR lpszRegister);
BOOL  ImmUnregisterWordA( HKL,  LPCSTR lpszReading,  DWORD,  LPCSTR lpszUnregister);
BOOL  ImmUnregisterWordW( HKL,  LPCWSTR lpszReading,  DWORD,  LPCWSTR lpszUnregister);
UINT  ImmGetRegisterWordStyleA( HKL,  UINT nItem,  LPSTYLEBUFA lpStyleBuf);
UINT  ImmGetRegisterWordStyleW( HKL,  UINT nItem,  LPSTYLEBUFW lpStyleBuf);
UINT  ImmEnumRegisterWordA( HKL,  REGISTERWORDENUMPROCA,  LPCSTR lpszReading,  DWORD,  LPCSTR lpszRegister,  LPVOID);
UINT  ImmEnumRegisterWordW( HKL,  REGISTERWORDENUMPROCW,  LPCWSTR lpszReading,  DWORD,  LPCWSTR lpszRegister,  LPVOID);
BOOL  ImmDisableIME( DWORD);
BOOL  ImmEnumInputContext(DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam);
DWORD  ImmGetImeMenuItemsA( HIMC,  DWORD,  DWORD,  LPIMEMENUITEMINFOA lpImeParentMenu,  LPIMEMENUITEMINFOA lpImeMenu,  DWORD dwSize);
DWORD  ImmGetImeMenuItemsW( HIMC,  DWORD,  DWORD,  LPIMEMENUITEMINFOW lpImeParentMenu,  LPIMEMENUITEMINFOW lpImeMenu,  DWORD dwSize);
BOOL  ImmDisableTextFrameService(DWORD idThread);
]]
